" MySQL索引存储结构主要包括B+树索引和哈希索引。B+树索引是一种基于磁盘的数据结构,具有以下特点:
1. 所有数据记录都包含在叶子节点中。
2. 非叶子节点仅包含索引关键字的值及指向叶子节点的指针。
3. 所有叶子节点通过指针相互连接,形成一个有序链表。
哈希索引是一种基于内存的数据结构,其原理是将索引关键字进行哈希运算,将结果存储在哈希表中。查询时,通过哈希表找到对应的关键字值。
如何知道SQL走了索引:
1. 使用`EXPLAIN`命令:在执行SQL语句前,使用`EXPLAIN`命令可以查看MySQL的查询计划。如果查询计划中使用了索引,会显示`key`字段,其中`type`表示索引类型(如ref、range等),`name`表示索引名称。
2. 查询`INFORMATION_SCHEMA`表:可以通过查询`INFORMATION_SCHEMA`表中的`COLUMNS`和`KEYCOLUMNUSAGE`表,结合`INDEX_NAME`、`COLUMN_NAME`和`REFERENCED_TABLE_NAME`等字段,分析SQL是否使用了索引。
3. 监控和分析:可以使用MySQL的慢查询日志、性能监控工具(如Performance Schema)等,对查询进行监控和分析,找出不走索引的SQL,从而优化索引。
4. 索引使用情况分析:通过查看`KEY_READ_HITS`和`KEY_READ_MISSES`等性能指标,可以了解索引的使用情况。如果`KEY_READ_MISSES`的值较高,说明有些查询没有使用索引,需要进一步分析原因。"