bug收集:专门解决与收集bug的网站
网址:www.bugshouji.com
mysql查询语句优化分享,不同的关键字的效率哪个更高?
01
JOIN 代替子查询NOT IN
NOT IN 的使用
DELETE FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
SELECT * FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )
使用JOIN替代
SELECT * FROM customerinfo
LEFT JOIN salesinfo ON customerinfo.CustomerID=salesinfo.
CustomerID
WHERE salesinfo.CustomerID IS NULL
02
数据处理放在运算符右边
SELECT * FROM order
WHERE YEAR(OrderDate)<2001;
SELECT * FROM order
WHERE OrderDate<"2001-01-01";
SELECT * FROM inventory
WHERE Amount/7<24;
SELECT * FROM inventory
WHERE Amount<24*7;
上面的两个查询也是返回相同的结果,但后面的查询将比前面的一个快很多
03
Like关键字与通配符的使用
在搜索字符型字段时,我们有时会使用 LIKE 关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的。例如下面的查询将会比较表中的每一条记录
SELECT * FROM books
WHERE name like "MySQL%"
但是如果换用下面的查询,返回的结果一样,但速度就要快上很多..
SELECT * FROM books
WHERE name>="MySQL"and name<"MySQM"
最后,应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用
04
其它
1. 用 not exists 代替not in
2. 得到行数 用count(1) 代替 count(*) OK
3. 当只需要少数字段时,用具体的字段,代替 select *
4. 想得到用户条数时,用count(1) 代替select 出结果