1. 程式人生 > >資料庫調優

資料庫調優

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
這些動作可以改在客戶端執行,它們增加了額外的開銷