mysql的索引有哪几种

哎哟,这索引的事儿,我当年刚接手个旧系统,真是头大。
你说的这些类型,我基本都踩过坑。

就说B-Tree吧,这玩意儿最常见,用得也最多。
我记得有年,系统慢得像蜗牛,一查,发现业务员老王天天在一张大表上查某个用户的订单,不加索引。
加了个B-Tree索引,唰唰几下就快了,那效果,啧啧。
不过,你要是搞错了索引列,比如建了索引但查询条件用了个不相关的字段,那索引可能就白加了,甚至更慢。
我这就有次,为了省事,直接用了表里的主键作为查询条件,结果别人用别的字段模糊查询,索引根本没起啥作用,真是哭笑不得。

哈希索引,这玩意儿我碰得少。
只在某个特定场景用过。
有次有个需求,得根据一个唯一的电话号码查用户信息,查起来贼快。
但是,你说的对,它不支持范围查询,这点用着特别受限。
你要是查“所有1 9 8 0年后出生的用户”,哈希索引就爱莫能助了。

全文索引,这个我印象深刻。
前几年,有个新闻网站,后台得根据用户输入的关键词搜文章。
全文索引用起来是真方便,搜“中国怎么怎么的”,比直接在文本里找快多了。
不过,你得注意的是,它对中文分词这块儿得特别注意,搞不好一个词分成了几段,搜起来就找不着了。
我记得有年他们改了分词器,那几天网站搜索功能都跪了。

空间索引,这个我更没碰过。
不过我听说,搞地理信息系统的,用这个索引定位位置特别快。
你要是搞个外卖平台,根据用户位置找附近的骑手,或者导航软件找最近的路,就得用这个了。

联合索引,这个常用啊。
你有张订单表,得根据用户ID和下单时间查订单,这时候建个联合索引就对了。
我有个项目,就是用户天天根据“地区”和“时间”查数据,不加联合索引,查询慢得要死。
加了之后,嗖嗖的。
但是,联合索引有个坑,就是索引列的顺序得选对。
你要是顺序搞反了,可能索引就白加了。
我记得有次我调优SQL,把联合索引的列顺序调换了一下,结果查询性能掉了一半,真是吓我一跳。

自适应哈希索引,这个我更没碰过,没在那个版本上做过项目,不敢乱讲。

位图索引,这个我也没碰过。
不过我听说,对付那些集合字段,比如用户的兴趣爱好,用这个索引查起来特别快。
你要是查“所有喜欢篮球的用户”,用位图索引可能就是一扫而光。
但这个玩意儿好像对数据类型有点要求,不是所有场景都能用。

总的来说啊,索引这东西,选对能救命,选错能要命。
你得根据你的业务场景,好好想想,到底用哪种索引,怎么用。
别瞎加,也别怕麻烦,有时候加个索引,系统性能就能提升一大截。
我这就有次,给一个查询优化,加了个索引,CPU从7 0%降到1 0%,那感觉,真爽。

mysql主键和索引的区别是什么

主键唯一标识行,一个表一个;索引加速检索,可多个。
主键非空,索引可空;主键逻辑键,索引物理键。
主键自动唯一索引,索引独立创建。
别过度索引,影响写入。