Re: [SQL ] 查詢速度很慢的原因在哪呢?
任何一種資料庫應該都一樣吧
針對某一個column進行INDEX時
若該欄位的重複值多
在 Oracle中
與這有關的 稱為 Cardinality
當Cardinality小 並不適用 B-TREE INDEX 適用 BITMAP INDEX ;
反之, B-TREE INDEX 會有較好的 PERFORMANCE , BITMAP 則否
舉例來說
對一個有千萬筆的table
若其中有一個欄位是記錄男或女, True 或 False...etc.
這種情況就適用 BITMAP INDEX
當然BITMAP INDEX 有其使用的不便,(如 LOCK 的 ISSUE 等)
若該 COLUMN 為具有 UNIQUE 傾向的, 如:身分證號, 學號...等
使用 B-TREE INDEX 會有較佳的效率
而 MySQL 有沒有像 BITMAP這種INDEX 小弟就不清楚了 @@
若沒辦法使用 DATABASE 的 FEATURE , 那只好從 DESIGN 下手,
也就是說, 必須如原po 切割該欄位這一類的做法,
但是 ... 老實說 , 這麼做有點麻煩 ...
歡迎高手補充
※ 引述《pandaforme (建 建)》之銘言:
: 資料庫:MySql 5.0
: 我有一個table裡面的資料約有38,343,604筆,其中裡面有一個欄位為col1
: 型態是varchar,每一筆長度約在3-10左右,值會有重複,有對此欄位設index。
: 假設查詢語法如下:
: select * from table where col1 = "aaaaa"
: 結果卻是相當緩慢大約會花上數十秒以上,甚至快兩分鐘
: 查詢結果出來會有好幾百萬行,我認為是table太大有對它作切割
: 即table1放col1欄位值長度為三的資料, table2放col1欄位值長度為四的資料 ...
: 但是分割後查詢速度雖然有改善,可是也要花上數十秒以上...
: 想請問各位先進是否有其他的方法可以改進呢?
: 是伺服器設備不夠好或是MySql在大型資料會表現的不夠好,麻煩大家幫我回答了
: 謝謝回答了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.145.230.2
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章