MySQL SQL最佳化

來源:互聯網
上載者:User

標籤: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最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.