Mysql語句優化sql
一、使用select語句儘可能多用字段,使用 * 效率更低。由於使用 * ,數據庫還要去查詢數據字典,而後解析列名,直接寫列名會提升效率。數據庫
select * from user; 要寫成 select userID,userName,userSalary from user;
二、 查詢數量,select(*)會有一個展開的過程,建議用字段,可是count(*)不會直接展開,直接就是掃描,查詢數量,而count(1)還要找到對應的字段因此效率就低了。函數
三、 查詢一條語句,儘可能在後面加上「limit1」(數據庫查詢到一條即中止)。優化
四、快速插入語句: 例如:spa
insert into user(name) values(‘m’); insert into user(name) values(‘n’); 改成, insert into user(name) values(‘m’), (‘n’);
SQL語句優化遵循原則
一、儘可能避免在列上運算,這樣會致使索引失效。code
二、使用 JOIN 時,應該用小結果集驅動大結果集,同時把複雜的 JOIN 查詢拆分紅多個query,由於JOIN 多個表,可能致使更多的鎖定和堵塞。blog
三、使用LIKE 時,避免使用 %%。排序
四、select 指定查詢字段,不要全查出來,節省內存。索引
五、使用批量插入語句節省交互。內存
六、limit的基數比較大時,使用 between,between 限定比 limit 快,可是between也有缺陷,若是id中間有斷行或是中間部分id不讀取的狀況,數據會少。
例如:
select * from t where 1 limit 100000,10 ; 可改成: select * from twhere id between 100000 and 100010;
七、不要使用rand 函數取多條隨機記錄。
八、避免使用 NULL。
九、不要作無謂的排序操做,而應儘量在索引中完成排序。
十、刪除全部記錄的時候,用truncate 替代 delete,由於 delete 刪除記錄時,會掃描整個表,而後再一條一條刪除,而 truncate table user; 是一次性刪除整個表的全部內容,會提升效率。
十一、儘可能多使用commit,由於 commit 會釋放回滾點 callback。
十二、用 where 子句替換 having 子句,where 先執行,having 後執行。由於 having 會先分組,比較佔內存。
1三、多使用內部函數提升SQL效率,例如多使用concat鏈接,代替‘||’的符號鏈接。
1四、表名過長時,儘可能使用表的別名,由於長表名更加的耗費掃描時間。
1五、使用列的別名,一樣地,長列名也會耗費掃描時間。
1六、兩者都能使用盡可能使用where(與having比較):where先過濾(數據就少了)再分組 。
1七、例:
select a.*, b.* from a,b where a.id=b.a_id;
注意from後面的表名,
(1).若是多表查詢是徹底無關係的話,將記錄和列名最少的表寫在最後,而後依次類推
(2).若是多表查詢是有關係的話,將引用最多的表放在最後,而後依次類推,這樣速度會有所提升。
1八、where子句中的鏈接順序(where也採用從右往左解析):
當使用where子句鏈接的時候,要將能夠過濾掉最大數量記錄的條件寫在where子句的最右邊,這樣,能夠過濾掉大量數據後,再執行其餘條件,能夠提升效率。
SQL優化持續更新中。。