Daniel Liu

I Need You To Tell Me That I’m A Good Person.

MySQL中的索引

2021年3月9日

MySQL

数据库优化是一个综合型的技术,并不是通过某一种方式让数据库效率提高很多,而是通过多方面的提高,从而使的数据库提高很多。
主要包括:

  1. 表的设计合理化(3范式)

  2. SQL语句优化

  3. 给表要添加合适的索引,如何使用索引。

  4. 分表技术(水平分割、垂直分割)

  5. 定时清除垃圾数据,定时进行碎片整理

  6. 多用存储过程,和触发器。

  7. 对mysql的配置进行一些优化

  8. 读写分离。

  9. MySQL服务器硬件升级。
    数据库的设计

MySQL中的索引:
基本法则:索引应该构建在被用作查询条件的字段上;索引类型:
B+Tree素引:顺序存储,每一个叶子节点到根结点的距离是相同的:左前缀索引,适合查询范围类的数据;可以使用B-Tree案引的查询类型:全键值、键值范围或键前缀查找:
全值匹配:精确某个值,“Jinjiao King":
匹配最左前缀:只精确匹配起头部分,“Jin%”
匹配范围值:
精确匹配某一列并范围匹配另一列:
只访问索引的查询
不适合使用B-Tree索引的场景:
如果不从最左列开始,索引无效:(Age,Name)
不能跳过索引中的列:(StuID,Name,Age)如果查询中某个列是为范围查询,那么其右侧的列都无法再使用索引优化查询:(StuID,Name)
Hash索引:基于哈希表实现,特别适用于精确匹配索引中的所有列;注意:只有Memory存储引擎支持显式hash索引:

适用场景:
只支持等值比较查询,包括=,IN(),<=>;不适合使用hash索引的场景:
存储的非为值的顺序,因此,不适用于顺序查询;不支持模糊匹配;空间索引(R-Tree):
MyISAM支持空间索引:
全辛索引(FULLTEXT):
在文本中查找关键词:

索引优点:
索引可以降低服务需要扫描的数据量,减少了I0次数;索引可以帮助服务器避免排序和使用临时表:索引可以帮助将随机I/0转为顺序I/0;高性能索引策略:
独立使用列,尽量避免其参与运算:
左前缀索引:索引构建于字段的左侧的多少个字符,要通过索引选择性来评估索引选择性:不重复的索引值和数据表的记录总数的比值;多列索引:
AND操作时更适合使用多列索引:
选择合适的索引列次序:将选择性最高放左侧;冗余和重复索引:不好的索引使用策略

不许转载😡!!!

Buy me a cup of coffee ☕.