作者MugenPower (无限MUGEN)
看板Database
标题Re: [SQL ] 查询速度很慢的原因在哪呢?
时间Mon May 14 17:11:55 2007
任何一种资料库应该都一样吧
针对某一个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