MYSQL查询语句效率问题

chinalagon 2009-02-08 09:16:53
任务:找出最贵物品的编号、销售商和价格。
表如下:
+---------+--------+-------+
| 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;

以上三条那条执行效率高?
如果您有更好的请写下来,谢谢各位!!
...全文
116 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhao8848jun 2009-02-20
  • 打赏
  • 举报
回复
3.SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;


这个高,前提是PRICE有索引。
chinalagon 2009-02-18
  • 打赏
  • 举报
回复
楼上最好把写的sql语句在库上跑跑看
tuao2 2009-02-12
  • 打赏
  • 举报
回复
SELECT article, dealer, price
FROM shop
where price=max(price)
chinalagon 2009-02-11
  • 打赏
  • 举报
回复
谢谢给位解答小弟万分感激
ACMAIN_CHM 2009-02-10
  • 打赏
  • 举报
回复
3.SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;


这个高,前提是PRICE有索引。
DAMINGSHANG 2009-02-10
  • 打赏
  • 举报
回复
哇哈哈哈,你问对地方了哦,我曾经遇到过这种问题,虽然我是用postgreSQL但原理都一样。
在数据库里建立一个maxnumber表,专门记载shop表的最大值
在数据库里建立一个事务,没变更一次shop表变更一次shop的最大值,这么说可能你不明白,我再说具体点,
比如shop表什么都没有的情况下,maxnumber表中maxnumber字段只有一个值,就是'0000',price字段是'0',如果shop被更新了,则触发事务比较那个新的price值是否比maxnumber表中的price字段中原有的值大,如果大则更新maxnumber字段为shop表中article的字段的值。。。。。
这样就省去了每次都要max的麻烦了
以上是偶的经验之谈,没有什么高深的技术,只是个土办法,不过绝对有效,哈哈。
mschen 2009-02-10
  • 打赏
  • 举报
回复
shop表比较大的情况下,可以在price字段上建立索引,如下:

create index idx_shop_price on shop(price);

这样采用第三种方式的效率比较高,因为使用price字段上的索引,只需要一次索引扫描就可以完成.
百年树人 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 chinalagon 的帖子:]
任务:找出最贵物品的编号、销售商和价格。
表如下:
+---------+--------+-------+
| 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 |
+---------+--------+-------+
比较…
[/Quote]

SELECT article, dealer, price 
FROM shop s
WHERE not exists(SELECT * FROM shop where price>s.price);

运用EXISTS子句不管子查询从表中抽取什么数据它只查看where子句
正如1楼所说,如果在price上建立索引的话,这种用法速度会更快,不必遍历整个表而仅根据索引就可完成工作。

ACMAIN_CHM 2009-02-08
  • 打赏
  • 举报
回复
3 执行效率高

price 加索引

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧