MySQL语句优化10项基本原则
2015-05-04 19:51
483 查看
原则1、尽量避免在列上进行运算,这样会导致索引消失
1 | SELECT * FROM table WHERE YEAR(d) > 2011; |
1 | SELECT *FROMtableWHEREd>'2011-01-01'; |
原则2、使用JOIN联表时,应用最小结果集驱动最大结果集。同时吧复杂的JOIN查询拆分为多个Query。因为JOIN多张表时,可能会导致更多的锁表和堵塞。
1234 | SELECT * FROM a JOIN b ON a.id = b.idLEFT JOIN c ON c.time = d.dateLEFT JOIN d ON c.pid = b.aidLEFT JOIN e ON e.cid = a.did; |
原则3、注意LIKE模糊查询的使用,避免使用 %..% 。
例如原句为:1 | SELECT * FROMtable WHERE name LIKE %de%; |
1 | SELECT * FROM table WHERE name >= 'de' AND name < 'df';//局限性很大[慎重] |
原则4、仅列出需要查询的字段,这对速度不会有明显的影响,主要考虑节省内存。
例如原句为:1 | SELECT * FROM tabel; |
)
优化为:
1 | SELECT id,name,age FROM table; |
原则5、使用批量插入语句节省数据库交互。
例如原语句:1 2 3 | INSERT INTO table (id,name) VALUES(1,'sunphp'); INSERT INTO table (id,name) VALUES(2,'mysql'); INSERT INTO table (id,name) VALUES(3,'优化'); |
12 | INSERT INTO table (id,name) VALUES(1,'sunphp'),VALUES(2,'mysql'),VALUES(3,'优化'); |
原则6、Limit的基数比较大时使用between。
例如原句为:1 | SELECT * FROM article ORDERBY id LIMIT 1000000,10; |
1 | SELECT * FROM article WHERE id BETWEEN 1000000 AND 1000010 ORDER BY id; |
原则7、不要使用 rand 函数获得随机多条记录。
1 | SELECT * FROM table ORDERBY rand() LIMIT 20; |
1 2 3 4 5 | SELECT *FROM table ASt1 JOIN ( SELECT ROUND( RAND() * ( SELECT MAX(id) FROMtable )-( SELECTMIN(id) FROMtable ) ) +(SELECT MIN(id)FROM table) ) AS id ) AS t2 WHERE t1.id >= t2.id ORDERBY t1.id LIMIT t1; |
原则8、避免使用 null。
原则9、不要使用 count(id),而应该使用 count(*)。
原则10、不要做无谓的排序操作,而应该尽可能在索引中完成排序。
http://wudi.in/archives/127.html
相关文章推荐
- MySQL语句优化的基本原则
- 带你深入了解MySQL语句优化的基本原则
- 带你深入了解MySQL语句优化的基本原则
- 带你深入了解MySQL语句优化的基本原则
- 带你深入了解MySQL语句优化的基本原则
- MySQL语句优化的原则
- MySQL如何利用索引优化ORDER BY排序语句 【转载】
- MySQL常用SQL语句优化
- MySQL 通过索引优化含ORDER BY的语句
- MySQL的Sql语句优化
- 浅谈MySQL中优化sql语句查询常用的30种方法
- mysql语句优化对比
- mysql使用Profiling分析query语句,sql语句性能优化
- 【转】优化MySQL语句的十个建议
- 关于语句优化和MySQL索引
- MySQL优化:使用慢查询日志定位效率较低的SQL语句
- Mysql中基本语句优化的十个原则小结
- mysql order by 造成语句 执行计划中Using filesort,Using temporary相关语句的优化解决
- mysql常用语句优化
- MySQL对limit查询语句的优化方法