繼續上次的測試,不過把字串搜尋的部分加了進去。索引對字串搜尋的效能似乎比較沒有幫助。
第一行是指令,第二行是沒有建立索引的資料表,第三行是有建立索引的資料表花掉的時間。另外我這次把資料增加到了二十萬筆,這樣差距會比較明顯。
select * from a_0_demo where c1 like '%xy%'
0.0845 秒
0.0366 秒
SELECT * FROM `a_0_demo` WHERE `int1` <> `int2` and c1 like '%xy__'
0.2936 秒
0.3015 秒
select * from a_0_demo where c1 like '__xyz%' and c2 like '%abc__'
6.1010 秒
7.4322 秒
遇到了最後一個結果,感覺怪怪的,決定再回來測試一次數字。
SELECT * FROM `a_0_demo` WHERE `int1` = 10000
4.8623 秒
0.0935 秒
今天上班有點無聊,平常用的DB是postgreSQL和MSSQL,看到您這個測試,我也建了一個類似的MSQL環境來玩玩,奇怪的是,當我測試Integer的查詢時,並不會有那麼大差距,除非我只針對某個欄位作index,效果才明顯有別。
另外在string的查詢上,確實是差別不大,不過我想這是因為您用了LIKE,記得LIKE的查詢字串開頭如果是”%”應該是不會套用index的,不知道對不對!?
我用VirtualBox做的測試環境,對於測試效果也許有影響!
環境:WinXP,MySQL5,VirtualBox,20萬筆
我忘了用不同語法會用不同的發誓搜尋,我應該從最基本的語法開始測試才對。
我測試 integer 時只有第一次差距會很大,第二次連時間都縮到很短,懷疑是不是資料庫也建立快取。我 時間去看一下 manual 好了。
我沒有在虛擬電腦下測試,因為怕電腦跑資料庫、伺服器和瀏覽器會吃不消,所以我找了一台測試機執行,那台作業系統是 FreeBSD ,但是應該沒什麼影響。
關於什麼時候會用到索引,下面這個網頁有提到一些:
MySQL索引經驗之淺見