MySQL索引對數據庫查詢速度的顯著提升

博主最近有一個數據庫,它的大小是這樣的
數據庫描述信息
然後博主執行了一條查詢語句SELECT * FROM stock_test WHEREcode = "000514" ANDdate = "2016-03-31";
查詢的結果是查詢結果
可以看到,查詢這一條數據所花費的時間就用了8秒左右,如果要對所有的數據進行分析,那不是得等到猴年馬月去了。

博主等不了這麼久,由於之前學過數據庫的索引,知道能夠優化查詢速度,但一直不知道能優化多少,於是抱着死馬當活馬醫的想法,對這個數據庫創建了主鍵索引ALTER TABLE stock_test ADD PRIMARY KEY(code(8),date);
創建索引
這個索引足足創建了1分15秒。。。

然後博主又執行了剛纔的查詢語句,結果是這樣的:
改善後的查詢結果
根據主鍵進行查詢,0秒就查出來了,博主再也不擔心分析這些數據的耗時了。

在MySQL參考手冊中對索引有這樣的說明:

索引用於快速找出在某個列中有一特定值的行。不使用索引,MySQL必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有一個索引,MySQL能快速到達一個位置去搜尋到數據文件的中間,沒有必要看所有數據。如果一個表有1000行,這比順序讀取至少快100倍。注意如果你需要訪問大部分行,順序讀取要快得多,因爲此時我們避免磁盤搜索。

大多數MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B樹中存儲。只是空間列類型的索引使用R-樹,並且MEMORY表還支持hash索引。

主鍵索引使用的B樹,而B樹查找一個元素的時間複雜度是 Θ log(n)的,因此查詢的速度能得到很大的提升,只是在創建索引的時候需要耗費一些時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章