
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 |