MySQL索引是什么

上周我和同事谈论MySQL索引。

索引可以加快查询速度。

B树索引是最常用的。

例如,按日期检查。

哈希索引不起作用。

全文索引是为文本搜索而设计的。

要创建索引,请选择列。

产品 ID 通常会被编入索引。

选择性必须高。

不要添加太多索引。

索引占用空间。

排序也很快。

但是写起来会很慢。

小心大桌子。

OLTP 需要较少的索引。

OLAP可以添加更多。

使用EXPLAIN查看执行计划。

忘记它吧。

学习笔记—MySQL(十七)——索引(INDEX)的数据结构B+树

那天我加班到半夜检查请求数据,但是SQL运行了十分钟,仍然没有显示结果。
打开标题并查看表格的完整扫描。
时钟只有8 00个条目,为什么这么慢?突然想到索引,就快速浏览了一下文档。

MySQL索引,坦白说,是一个加快搜索速度的工具。
例如,如果你在图书馆看书,只是一页一页地翻,不看目录,最终你会感到很累。
该索引类似于一本书的目录。
翻几页就可以找到本章。
MySQL 使用 B+ 树进行索引,为什么?磁盘读写速度慢,但B+树可以避免转弯。

如何到达B+树?从根节点开始,依次向下,排列叶节点。
例如,要检查订单号,首先在根节点中查找范围,然后进入下一级,最后根据叶节点中的线索进行查找。
最多可以转换多少层?数据库说log(n),n是数据量。
有了8 00条数据,就达到了第三级。
表盘指针移动3 次,比扫描整个表8 00次要好得多。

InnoDB和MyISAM都使用B+树,但它们有所不同。
InnoDB保留完整数据存储,并直接使用主键索引。
恢复非主键索引的表,先找到主键,再找到数据。
MyISAM留存储数据地址,索引和数据分开存储。
我在做项目的时候,使用MyISAM导入数据非常慢。
后来我改成InnoDB就好了。

优化索引时要注意什么?例如,不要使用字符串作为主键。
“张三”比“1 001 ”慢一百倍。
根据最常用的术语,共享索引应该放在第一位,“id,date”比“date,id”更快。
我突然想到,索引虽然快,但是增删改查的时候需要维护,而且表大的时候会崩溃。
所以说指示器是一把双刃剑,用在正确的地方可以省事。

例如这张表中id是自增主键,status使用enum类型,查询时使用“status=1 ,id>1 00”。
这个内置索引效率很高,但是如果改成“Status='Pending'且ID在1 00到2 00之间”,就会性能很差。
这需要实际测试。
理论再好,没有数据支撑也是一句空话。