5 MySQL SQL查詢優化

2021-10-12 09:57:49 字數 1321 閱讀 7362

- 索引的優點

大大提公升查詢效率

- 索引的代價

索引導致對錶刪除,更新時,要同步修改索引.

且索引本身佔據儲存空間.

- 挑選索引

1.為用於搜尋,排序或分組的列建立索引

而對用作輸出顯示的列則不用建立索引

2.索引列差異值個數應較多.

即乙個鍵值對應結果不應過多.

2.索引列資料型別要在滿足需求下盡可能佔據較少空間

對字串可考慮字首索引

3.索引不應過多.能滿足需要即可.

b+樹索引較為適合範圍查詢

雜湊索引較為適合單個值查詢

4.可結合慢查詢日誌改進索引和操作效率

- mysql查詢優化程式

優化指導

1.分析表

analyse table

會計算出表中各個索引列值數量資訊,這些資訊在對指定查詢進行優化時,是可以決定優化的參考資訊.

2.用explain

將輸出執行策略資訊

依據此策略進行評估,調整,以得到更加高效的方案

3.必要時給優化程式提示或改寫它

4.盡量讓參與運算的各列型別一致,以消除運算時的型別轉換

5.索引列本身構成表示式時才會啟用列的索引

- 選擇利於高效查詢的資料型別

數字效率處理效率優與字串

盡量用可用能滿足要求的較小型別

有not null要求下,不用判斷null情形,處理更快

對經常修改的表,經常進行碎片整理,即為

%mysqldump db_name tbl_name > dump.sql // 表匯出為檔案

%mysql db_name < dump.sql // 從檔案重建表

用optimize table也可實現碎片整理

把blob或text列剝離出來形成乙個單獨的表 // 單獨列佔據較大空間

- 高效載入資料

1.減少磁碟i/o次數的方案可提公升i/o效率

2.在載入資料前不設索引,載入完成後建立索引比載入前設定索引處理效率更高.

3.load data優於insert

4.通過將多個insert整合到乙個事務

或在不支援事務下用lock / unlock tables包圍多個insert,

可實現多個insert後整體重新整理一次索引,比每次insert後重新整理索引更有效率.

- 排程,鎖定,併發

mysql的排程策略

1.寫入的優先順序高於讀取

2.一次只能有乙個寫,可有多個讀.

3.innodb支援行級鎖

innodb的鎖定可能產生死鎖

Mysql sql查詢優化

1.單個條件未加索引 對應的執行計畫 從查詢計畫中可以看出該查詢全表掃瞄,掃瞄行數 9000多行 2.增加唯一索引之後查詢 查詢時間縮短,然後再看查詢計畫 查詢計畫中,掃瞄行數中只有一行。上面建立的索引是唯一索引,常規索引中查詢計畫的type一般為ref 索引列和非索引列一起查詢,索引仍然會有效 單...

MYSQL SQL查詢優化

1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,可以對欄位進行設定預設值處理,避免null值出現 3.應盡量避免在 where 子句...

Mysql sql模糊查詢,sql優化日常

mysql 1 模糊查詢 2 聯表查詢優化 1 模糊查詢 like select from ms fans where nick name like demo limit 0,100 like xx 不能使用索引 like xx 可使用字段索引,查詢效率快 locate同樣不能使用索引,40萬資料中...