在進(jìn)行多個表聯(lián)合查詢的時候,使用索引可以顯著的提高速度,剛才用SQLite做了一下測試。 建立三個表: create table t1 (id integer primary key, num integer not null, word1 text not null, word2 text not null); create table t2 (id integer primary key, num integer not null, word1 text not null, word2 text not null); create table t3 (id integer primary key, num integer not null, word1 text not null, word2 text not null); 建立若干索引: t1表:在num,word1,word2上有復(fù)合索引 t2表:在num,word1,word2上各有一個索引 t3表:在word1上有一個索引 create index idxT1 on t1(num,word1,word2); create index idxT2Num on t2(num); create index idxT2Word1 on t2(word1); create index idxT2Word2 on t2(word2); create index idxT3Word1 on t2(word1); 向三個表中各插入10000行數(shù)據(jù),其中num項為隨機(jī)數(shù)字,word1和word2中是英文單詞,三個表中對應(yīng)的num,word1和word2列中都包含有部分相同值,但是它們在表中出現(xiàn)的順序不同。 速度測試結(jié)果: 1) select count(*) from t1,t3 where t1.word2=t3.word2; 很慢(t3.word2上沒有索引) 2) select count(*) from t3,t1 where t1.word2=t3.word2; 很慢(t1.word2上沒有獨(dú)立索引) 3) select count(*) from t1,t2 where t1.word2=t2.word2; 很快(t2.word2上有索引) 4) select count(*) from t2,t1 where t1.word2=t2.word2; 很慢(t1.word2上沒有獨(dú)立索引) 5) select count(*) from t1,t2 where t1.num=t2.num; 很快(t2.num上有索引) 6) select count(*) from t2,t1 where t1.num=t2.num; 很快(t1的復(fù)合索引中,第一個列是num) 7) select count(*) from t1,t3 where t1.num=t3.num; 很慢(t3.num上沒有索引) 8) select count(*) from t3,t1 where t1.num=t3.num; 很快(t1的復(fù)合索引中,第一個列是num) 結(jié) 論:在from子句后面的兩個表中,如果第2個表中要查詢的列里面帶有索引,這個查詢的速度就快,反之就慢。比如第三個查詢,from后面的第2個表是 t2,t2在word2上有索引,所以這個查詢就快,當(dāng)輸入SQL命令并回車后,查詢結(jié)果就立即顯示出來了,但是如果使用第4個查詢命令(即把t1和t2 的位置互換),查詢起來卻用了1分零6秒。 可見索引的建立對于提高數(shù)據(jù)庫查詢的速度是非常重要的。 |
免責(zé)聲明:本站部分文章和圖片均來自用戶投稿和網(wǎng)絡(luò)收集,旨在傳播知識,文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請勿用于商業(yè)用途,如果損害了您的權(quán)利,請聯(lián)系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長轉(zhuǎn)型升級,為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營銷服務(wù),與站長一起進(jìn)步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨(dú)!
掃一掃,關(guān)注站長網(wǎng)微信