1
tuzhenyu 2017-10-18 21:34:55 +08:00
MySql 支持 hash 索引?
|
2
opengps 2017-10-18 21:40:35 +08:00
这个数据级别,分表分区吧
|
3
opengps 2017-10-18 21:41:41 +08:00
我有个十亿级别数据库,sqlserver 实现的,但是,设计结构采用无主键方式,时间聚集索引
|
4
a251922581 OP @tuzhenyu 对 varchar 应该可以吧,INDEX `idx_text` USING HASH(TEXT)
|
5
lujjjh 2017-10-19 07:56:22 +08:00 via iPhone
@a251922581 InnoDB 和 MyISAM 都不支持 HASH 索引。坑点在于你这么写不会报错,实际上建的却是 BTree 索引……
|
6
sagaxu 2017-10-19 08:14:56 +08:00 via Android
如果 col=222 的行很多,依然会全表扫
|
7
sunchen 2017-10-19 14:00:51 +08:00
能,不过具体效果取决于这一列的数据分布的离散情况,以及和数据主键的的分布的相关性。如果 222 的数据在 1 亿数据里分布很广,IO 依然很多
|
8
sunkuku 2017-10-19 18:21:13 +08:00
1.column 尽量不要用 int 类型
2.尽量设计多列、覆盖索引,避免二次随机寻盘 3.这个场景不适合 hash 索引,因为 hash 索引会大大增加索引空间,如果你的 hash 函数简单的话,还要处理 hash 冲突 最后一点,也是搜索效率最高的一种方法,读效率可能提升百倍。但是有大的空间损耗和写数据变慢 就是建一个冗余的表,primary key = int_column + (increased number) 。就是说让你的 int column 成为 primary key 的前缀。这样在搜索的时候,全部是顺序查找,只需要一次寻盘。 |
9
a251922581 OP |