sql效能優化

weixin_34321977發表於2017-04-24

sql效能優化

1.mysql快取,在執行多次相同查詢時,查詢結果會放在快取中,但是如果查詢sql中有函式的時候,就不會再快取中查詢,可以用變數代替函式。

2.在查詢一條資料的時候,加上限制,會提高效能 select 1 from table limit 1。

3.當某個欄位查詢頻率高的話,可以建立索引來提高查詢效能。

4.通過join關聯查詢是,關聯欄位建立索引。

5.避免全表查詢,需要什麼欄位就查詢什麼欄位。

6.表的主鍵避免用varchar型別。最好用int型別。

7.固定長度的表查詢會快一些,但是也浪費空間,當含varchar text blob的時候這個表就不是固定長度了。

8.當一個表有大量欄位的時候,可以把表分割,把不經常用的欄位分配到其他表中;叫垂直分割;

9.當有大量訪問的時候,操作insert和delete的時候需要注意,這個時候表示被鎖住的,如果時間過長伺服器可能會掛。可以加限制,每次刪固定條數。

DELETE FROM logs WHERE log_date <= '2009-11-01' LIMIT 1000

10.選取正確的儲存引擎,MyISAM對於大量資料的查詢效能高,特別是查詢行數的時候,但是對於其他操作效能低下;InnoDB支援行鎖,對於寫會好點。

11.避免全表掃描

where和order by和分組的欄位考慮建立索引(索引不是越多越好,降低了update 和insert效率);
對null進行判斷(可以設定預設值),!=,or(可以把or的條件資料查詢出來,用union all拼接),in(連續的可以用between代替)和not in,where a/2=1,

12.儘量用數字型別,不用字串型別

13.不要用select *

14.select Count (*)(只有一個欄位的時候快)和Select Count(1)(沒有主見的時候快)以及Select Count(column)(不能統計null值)區別

15.在配置檔案中可以配置慢日誌:在my.ini->[mysqld] ;可以配置最大連線數max_connections;等待請求數量back_log;interactive_timeout請求等待的時間;query_cache_size快取的大小;

16.越小的資料型別越好,但是也需要預留一些

17.分表:把一個大表分成多個實體表,手動

18:分割槽:把表分成段,存在不同的位置,其實還是一個表

ALTER TABLE sale_data ADD PARTITION (
    PARTITION p201010 VALUES LESS THAN (201011));

相關文章