mysql的索引有哪几种

告诉你一件事,我在做这个项目的时候,确实踩过很多坑。
至于索引,让我告诉你真实的故事。

假设去年我正在做一个电子商务项目。
数据量不大,只有几百瓦。
一开始就使用B-Tree索引,这是最常见的,可以用来快速搜索所有内容。
后来随着业务的发展,突然需要查看某个用户的历史订单,并且需要按照时间间隔来查看。
嗨,我这时候无语了。
B-Tree索引不支持范围查询,查询速度很慢。
我添加了全文字段索引,但发现它根本没有使用。
整个数据都被搜索了。
最后无奈,只能添加一个公共索引,将用户ID和时间字段串联起来,这是唯一的解决办法。

再比如,我去年在一家地图导航公司实习。
他们使用空间索引,可以非常快地找到兴趣点。
我一脸好奇,问他们为什么不使用B-Tree。
他们告诉我,他们必须检查哪个区域有哪个商店,或者检查两点之间是否有十字路口。
由于这种范围和交叉搜索,B-Tree 速度很慢。
因此,如果您选择了错误的索引,确实会减慢速度。

我也尝试过哈希索引一次。
当时,在一个小系统中,有些字段是唯一的,可以快速检查。
结果数据重复了一次,查起来就乱七八糟了。
所以,哈希索引只适合唯一值,你必须记住这一点。

还有自适应哈希索引,我还没有真正接触过。
但我听他们说,MySQL 8 .0之后,在高基数字段上使用它非常快。
不得不说,我不敢乱说,我还没有真正用过。

最让我头疼的是位图索引。
在项目中,有一个字段是多个标签的集合。
为了检查它是否是特定标签,我想使用位图索引。
结果发现数据量不够大,索引效果不好。
因此,位图索引取决于数据量,不能用于小数据量。

简而言之,索引确实取决于业务场景。
我踩到的坑是,一开始什么都能想到,却发现每个索引都有自己的场景。
我现在做项目的时候都是先分析查询模式,然后再选择索引,所以没有什么大问题。

百度知道页面保存着很多资源,包括用户交互、注册等模块。

唉,这一堆代码看得我头疼。
有一天我登录百度,想给一些建议,但是当我点击它时,它看起来像一堆扭曲的字符。
我只是想知道,这个东西是什么时候添加的?去年我想。
不过,那段时间想进去有点困难。
我记得当时对我的朋友说,界面已经变得复杂了,有一天可以简化。
结果,人们根本不理我,也许是因为他们认为我说的话无理取闹。
哎,我当时就觉得这些技术人员并不真正了解用户。