資料庫調優
阿新 • • 發佈:2019-01-27
1.
Sql語句優化原則
優化需要優化的Query
定位優化物件效能瓶頸
從Explain入手
儘可能在索引中完成排序
只取自己需要的Column
儘可能避免複雜的join和子查詢
2
優化limit
select * from test1 order by id limit 99999,10
原語句雖然使用了id索引,但是相當於從第一行定位到99999行再去掃描後10行,相當於掃描全表
如果改為
select * from test1 where id>=100000 order by id limit 10
則直接定位到100000查詢
3.
儘量避免SELECT *命令
4.
不讓排序
在使用group by 分組查詢時,預設分組後,還會排序,可能會降低速度.
比如:
在group by後面增加 order by null 就可以防止排序.
5.
使用連線來替代子查詢
有些情況下,可以使用連線來替代子查詢。因為使用join,MySQL不需要在記憶體中建立臨時表。
[糟糕的效率]
select * from sales2 where company_id not in(select id from company2)
[簡單處理方式]
select * from dept, emp where dept.deptno=emp.deptno;
[左外連線,效率最高]
select * from dept left join emp on dept.deptno=emp.deptno;
6.
利用LIMIT 1取得唯一行
有時,當你要查詢一張表是,你知道自己只需要看一行。在這種情況下,增加一個LIMIT 1會令你的查詢更加有效。這樣資料庫引擎發現只有1後將停止掃描,而不是去掃描整個表或索引
7.
使用 EXISTS代替in
EXISTS要遠比IN的效率高。裡面關係到full table scan和range scan。幾乎將所有的IN操作符子查詢改寫為使用EXISTS的子查詢
8.
不要手賤
沒有必要時不要用DISTINCT和ORDER BY
這些動作可以改在客戶端執行,它們增加了額外的開銷