我相信大家都知到資料庫有所謂的索引,但是我相信很多人都不清楚怎麼用才是最好的。
我用下方來舉例。
有下方一個資料表:
TABLE_A | |||||
COL_A | COL_B | COL_C | COL_D | COL_E | COL_F |
當你有一串長用的SQL,當中只有WHERE 後面比對的值會不段的變動。
SELECT * FROM TABLE_A WHERE COL_A='123' AND COL_B='455' AND COL_E='789'
剛開始的時候資料量少,期時搜尋起來你沒什麼太大感覺。
突然有一天,你發現資料變超多,而且跑這段的時候變超慢。
你就可以考慮用索引的方式來解決,但是重點來了,怎麼建索引才是比較好的方式呢?
每個欄位個別建一次?
ALTER TABLE `TABLE_A` ADD INDEX(`COL_A`);"
ALTER TABLE `TABLE_A` ADD INDEX(`COL_B`);"
ALTER TABLE `TABLE_A` ADD INDEX(`COL_C`);"
ALTER TABLE `TABLE_A` ADD INDEX(`COL_D`);"
ALTER TABLE `TABLE_A` ADD INDEX(`COL_E`);"
ALTER TABLE `TABLE_A` ADD INDEX(`COL_F`);"
你要這麼做也可以,但是不一定會比較有效率而且會衍生出很多不必要空間的浪費。
索引就像式書的目錄頁一樣,他會幫你把裡面的資料資料先建一份目錄,讓你知道你查的值式式落在哪個區間。
就像是我們可以透過書的目錄,直接查到我們要的資料在哪一頁,可以直接翻到那頁去看。
但你會問,那上面的建法哪裡不好?不是一個一個去建立,這樣在查不是比較好馬?
但是像我最上面舉例的SQL 查詢,我其實只有用到 COL_A COL_B COL_E,而且這三個欄位都會一起查詢。
所以我會用這三個欄位建一個索引。
ALTER TABLE `TABLE_A` ADD INDEX(`COL_A`,`COL_B`, `COL_E`);"
因為這樣的他會把三個值相關敘述去做索引。
以這段範例的SQL 來看,後者的查詢速度會比前者快很多。
但是這樣的建法就會變成要依照SQL的來建立索引,一個TABLE 可以就會有多個索引。
或女你的資料量不大,但是當資料量大,甚至到10筆以上的時候,你就非得這樣考慮不可了。
留言列表