韓雪嬌
摘 要:查詢優化技術是網站設計與開發中重點考慮問題,本文深入研究MySQL數據庫中的索引技術的優點和代價,以及在MySQL數據庫中創建索引的方法。最后以中國鋼管網為例,說明索引在本網站查詢優化的實際應用。
關鍵詞:查詢優化;MySQL;索引技術
1 查詢優化的必要性
隨著門戶類網站及業務類網站的廣泛應用,海量的數據需要存儲以及查詢。此時,數據庫查詢效率的優劣將直接影響網站的響應速度及用戶體驗[1],甚至當數據庫的數據量達到數千萬條甚至更多時,就會出現數據庫查詢的瓶頸問題。因此,優化數據庫的查詢性能是十分必要的。而MySQL作為一種開源的輕量級數據庫應用十分廣泛[2]。當前MySQL查詢優化技術主要有數據庫配置參數優化、查詢重用方法優化、索引技術等。
2 MySQL索引技術的優缺點
在MySQL中不帶索引的表是一個無序數據行的集合。以tb_news表為例,如表1所示,若查找NewsID=3的新聞,需掃描表中的每個數據行并進行匹配,最終找到NewsID為3的新聞,共掃描1000條數據。
若在該表的NewsID數據列上建立索引,如表2所示。那么在查找NewsID=3的數據時將直接掃描索引找到NewsID為3的新聞。由此可見,索引的優點一是找到匹配的數據行并終止查詢。優點二是使用定位算法查找第一條匹配的條目,而無需從索引的頭部開始執行線性掃描,節省搜索時間。
當查詢涉及多個表時,索引的作用更大。假設有3個包含1000條記錄的數據表t1、t2和t3,每個表都包含數據列i1、i2和i3。執行查詢SELECT t1.i1,t2.i2,t3.i3 FROM t1,t2,t3 WHERE t1.i1=t2.i2 AND t2.i1=t3.i3,結果為1000條有3個相等數值的記錄。若不帶索引掃描的數據量為1000×1000×1000。創建索引后的掃描過程為:首先選擇表t1中的第一行并查看該數據行的值;然后使用表t2上的索引,直接定位到與t1的值匹配的數據行,表t3同理直接匹配數據行;最后處理表t1的下一行并重復前兩步,直到表t1中的數據行被掃描完畢。表t1執行全掃描,而表t2和t3上執行索引查找,掃描數據量為1000,理論上查詢效率提高了一百萬倍。
雖然索引技術可提高查詢效率,但也存在缺點。首先索引技術降低了增刪改操作的執行速度。當執行增刪改操作時需要更新數據表的索引。其次,索引技術會耗費存儲數據庫的磁盤空間。所以在MySQL數據表中并非創建的索引越多越好,一般僅在數據表的主鍵、排序、分組以及經常出現在WHERE和JOIN等子句中的數據列上創建索引。以中國鋼管網(http://www.cspa-cn.org.cn/)為例,在網站運營中發現index.jsp頁面加載緩慢。開啟瀏覽器的開發模式發現index_news.action請求花費了3.90s。分析該Action中執行的SQL查詢發現SELECT x.* FROM xnews_info x WHERE x.newsxxlx='12' ORDER BY newsid DESC limit 0,9查詢最為耗時。研究得出該網站新聞表數據龐大,而類別為12的新聞只有數條故需全表掃描。針對該問題,在主鍵newsid上建立唯一索引和外鍵newsxxlx建立普通索引。再次執行該SQL語句由原來的3.173ms縮減到0.003ms,大大縮短了index.jsp頁面的加載時間。
3 結語
在MySQL數據庫中采用索引技術將增加數據表的寫入、刪除和更新操作負擔和消耗數據庫部分存儲空間,但是恰如其分的創建索引可以顯著提高查詢效率。在網站的實際運營中也證實索引技術可縮短網頁的響應時間,為用戶提供更為流暢的視覺體驗。
參考文獻
[1]伍應樹,趙志剛,李憲明.關系數據庫基于索引查詢的優化設計研究[J].電腦編程技巧與維護,2016,(17):56-58.
[2]蔡代純.空間數據庫查詢優化技術研究[J].山東工業技術,2015,(5):169.
(作者單位:冶金工業信息中心)