任务:找出最贵物品的编号、销售商和价格。
表如下:
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
比较以下几条sql语句执行效率:
1.SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop);2. select s1.article,s1.dealer,s1.price
from shop s1,(select max(price) price from shop) s2
where s1.price = s2.price;3.SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;以上三条那条执行效率高?
如果您有更好的请写下来,谢谢各位!!
表如下:
+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+--------+-------+
比较以下几条sql语句执行效率:
1.SELECT article, dealer, price
FROM shop
WHERE price=(SELECT MAX(price) FROM shop);2. select s1.article,s1.dealer,s1.price
from shop s1,(select max(price) price from shop) s2
where s1.price = s2.price;3.SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;以上三条那条执行效率高?
如果您有更好的请写下来,谢谢各位!!
SELECT article, dealer, price
FROM shop s
WHERE not exists(SELECT * FROM shop where price>s.price);
运用EXISTS子句不管子查询从表中抽取什么数据它只查看where子句
正如1楼所说,如果在price上建立索引的话,这种用法速度会更快,不必遍历整个表而仅根据索引就可完成工作。
在数据库里建立一个maxnumber表,专门记载shop表的最大值
在数据库里建立一个事务,没变更一次shop表变更一次shop的最大值,这么说可能你不明白,我再说具体点,
比如shop表什么都没有的情况下,maxnumber表中maxnumber字段只有一个值,就是'0000',price字段是'0',如果shop被更新了,则触发事务比较那个新的price值是否比maxnumber表中的price字段中原有的值大,如果大则更新maxnumber字段为shop表中article的字段的值。。
这样就省去了每次都要max的麻烦了
以上是偶的经验之谈,没有什么高深的技术,只是个土办法,不过绝对有效,哈哈。
FROM shop
ORDER BY price DESC
LIMIT 1;
这个高,前提是PRICE有索引。
FROM shop
where price=max(price)
FROM shop
ORDER BY price DESC
LIMIT 1;
这个高,前提是PRICE有索引。