程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL查詢優化技術系列講座之使用索引

MySQL查詢優化技術系列講座之使用索引

編輯:關於MYSQL數據庫
索引是提高查詢速度的最重要的工具。當然還有其它的一些技術可供使用,但是一般來說引起最大性能差異的都是索引的正確使用。在MySQL郵件列表中,人們經常詢問那些讓查詢運行得更快的方法。在大多數情況下,我們應該懷疑數據表上有沒有索引,並且通常在添加索引之後立即解決了問題。當然,並不總是這樣簡單就可以解決問題的,因為優化技術本來就並非總是簡單的。然而,如果沒有使用索引,在很多情況下,你試圖使用其它的方法來提高性能都是在浪費時間。首先使用索引來獲取最大的性能提高,接著再看其它的技術是否有用。

  這一部分講述了索引是什麼以及索引是怎麼樣提高查詢性能的。它還討論了在某些環境中索引可能降低性能,並為你明智地選擇數據表的索引提供了一些指導方針。在下一部分中我們將討論MySQL查詢優化器,它試圖找到執行查詢的效率最高的方法。了解一些優化器的知識,作為對如何建立索引的補充,對我們是有好處的,因為這樣你才能更好地利用自己所建立的索引。某些編寫查詢的方法實際上讓索引不起作用,在一般情況下你應該避免這種情形的發生。

  索引的優點

  讓我們開始了解索引是如何工作的,首先有一個不帶索引的數據表。不帶索引的表僅僅是一個無序的數據行集合。例如,圖1顯示的ad表就是不帶索引的表,因此如果需要查找某個特定的公司,就必須檢查表中的每個數據行看它是否與目標值相匹配。這會導致一次完全的數據表掃描,這個過程會很慢,如果這個表很大,但是只包含少量的符合條件的記錄,那麼效率會非常低。

 

  圖1:無索引的ad表

  圖2是同樣的一張數據表,但是增加了對ad表的company_num數據列的索引。這個索引包含了ad表中的每個數據行的條目,但是索引的條目是按照company_num值排序的。現在,我們不是逐行查看以搜尋匹配的數據項,而是使用索引。假設我們查找公司13的所有數據行。我們開始掃描索引並找到了該公司的三個值。接著我們碰到了公司14的索引值,它比我們正在搜尋的值大。索引值是排過序的,因此當我們讀取了包含14的索引記錄的時候,我們就知道再也不會有更多的匹配記錄,可以結束查詢操作了。因此使用索引獲得的功效是:我們找到了匹配的數據行在哪兒終止,並能夠忽略其它的數據行。另一個功效來自使用定位算法查找第一條匹配的條目,而不需要從索引頭開始執行線性掃描(例如,二分搜索就比線性掃描要快一些)。通過使用這種方法,我們可以快速地定位第一個匹配的值,節省了大量的搜索時間。數據庫使用了多種技術來快速地定位索引值,但是在本文中我們不關心這些技術。重點是它們能夠實現,並且索引是個好東西。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved