mysql索引介绍

说到MySQL索引,这是数据库优化的一个关键点。
我多年来一直访问问答论坛,看到很多朋友在索引方面遇到问题。
下面我们就来说说这几类索引,我会给大家详细解释一下。

首先是我们最常用的BTREE索引。
它就像一棵树。
查询时,从根节点开始,逐层查找,直到找到叶子节点。
这个东西支持精确匹配,范围查询,并且可以帮你排序,所以大多数情况下都可以使用。

我们来谈谈HASH索引。
这个东西直接通过哈希函数找到数据,速度很快。
但缺点是它只能用于条件查询,如“=”或“IN”。
如果要使用范围查询或者排序,效率就会降低。

FULLTEXT索引主要针对文本。
当您使用“LIKE '%word%'”等模糊查询时,这会派上用场。
不过这个东西只支持CHAR、VARCHAR和TEXT列类型,并且只存在于MyISAM引擎中。

RTREE索引用于空间数据,例如地理位置信息,但很少使用,仅MyISAM和InnoDB支持。

至于索引类型和函数,有很多。
唯一索引可加快查询速度,同时确保列值唯一。
由多个列组成,比单个索引更有效。
全文索引对文本进行分段后创建索引,适合复杂的文本搜索。

创建索引的方式有多种,比如使用CREATE INDEX、ALTER TABLE,或者在创建表时直接指定。
要删除索引,请使用 DROP INDEX 或 ALTER TABLE DROP INDEX。
要查看索引,请使用 SHOW INDEX FROM 或 SHOW CREATE TABLE。

但是,索引失败也是一个常见问题。
如果对索引列使用计算、函数或类型转换,或者使用不等于、IS NULL/IS NOT NULL 等条件,或者在 LIKE 查询之前放置通配符,这将使索引无效。

最后我们来谈谈索引设计协议。
必须针对唯一的业务字段创建唯一索引,避免多表连接。
相关字段的数据类型必须一致并有索引。
您必须指定 VARCHAR 索引的长度,该长度是根据分辨率确定的。
在页面上搜索时,请避免左字段或完全模糊的查询,并首先使用搜索引擎。

这说起来容易,但在实践中却需要深思熟虑。
希望我的经验对你有帮助。

那些年被面试官怼的MySQL索引

这是一个陷阱。
不要频繁添加、删除或修改MyISAM上的数据。

实用提醒:尝试使用InnoDB存储引擎,它更适合高并发的读写操作。

MySQL建组合索引时为何区分度最高的要在最左边?

等等,昨天调试慢订单查询的时候,感觉有点奇怪。
该表有一个索引(用户ID、订单时间)。
我查的时候,首先按照userid进行过滤,返回了几千条记录。
然后我按照订单时间进行过滤。
整个请求花了几秒钟。
我修改了订单,改为(订单时间,用户id)。
这次我检查了数百个条目并在几秒钟内打开它们。
这件事给我的印象特别深刻。
大概是上周三,客户催结果,我忙了很长一段时间的改变。
MySQL 的“最左前缀”原则实际上不仅仅是纸上谈兵的想法。
这类似于您搜索某些内容时:首先按主类别对其进行排序,然后按子类别进行搜索。
这比一一查找要容易得多。
但如果主要类别划分不好,比如不把不相关的放在前面,那也是枉然。
我突然想到,如果数据量再大一点怎么办?比如有几百万条记录,这样的顺序效果会不会更明显?