標籤:ext 使用 查看 提示 explain esc process 索引 排列
一、最佳化資料庫的一般步驟:
(A) 通過 show status 命令瞭解各種SQL的執行頻率。
(B) 定位執行效率較低的SQL語句,方法兩種:
事後查詢定位:慢查詢日誌:--log-slow-queries=[file_name],
事中查詢狀態:show processlist命令查看當前進行的線程,包括鎖表情況
(C) 通過EXPLAIN 或 DESC 分析低效SQL的執行計畫
(D) 確定問題並採取最佳化措施
二、索引問題
(A) MyISAM儲存引擎的表的資料和索引是自動分開儲存的,各自獨立的一個檔案;InnoDB儲存引擎的表的資料和索引在一個資料表空間裡,但可以有多個檔案組成。
(B) MySQL中索引的儲存類型目前只有BTREE和HASH兩種,具體和表引擎有關。支援首碼索引。
(C) 對於多列索引,最左首碼的成立條件要注意,必須是最左邊的列。
(D) like查詢,是常量且萬用字元不是第一個字元時,才能使用索引。
(E) 對大檔案進行搜尋,建議採用全文索引,
(F) 如果列名是索引,使用 column_name is null 將使用索引。
(G) or分割的條件中,如果不是兩個都有索引,就不會使用索引。
(H) 如果列類型是字串,一定記得把字串常量值用引號括起來,否則不使用索引。
三、查看索引使用方式
如果索引有效,Handler_read_key的值將很高,代表了一個行被索引值讀的次數,
Handler_read_rnd_next 表示資料檔案讀下一行的請求數,值高意味著查詢運行低效。
四、兩個簡單實用的最佳化方法
(A) 定期分析表和檢查表
五、常見SQL的最佳化
(A) 大批量插入資料,
通過控制索引的開啟和關閉來提升速度。
控制匯入資料的排列順序來提升速度。
通過開啟和關閉唯一性校正來提升速度。
通過開啟和關閉自動認可屬性來提升速度。
(B) 通過 order by null 消除排序的時間消耗
(C) 最佳化巢狀查詢:串連查詢比子查詢更有效率:子查詢需要在記憶體中建立暫存資料表。
(D) or 條件的每個條件列都必須有索引,才使用索引。
(E) 使用SQL提示,
MySQL SQL最佳化