• MySQL调优学习笔记(五、高性能索引)


    目录:

    • 高效索引策略
    • 维护索引和表
    • 索引创建的选择

    高效索引策略

    1、组合索引:多条件查询时使用组合索引,多每个查询的列增加独立的索引并不能提高查询效率。———————————————————————————————————————————————————————

    2、独立的列:查询的列不是独立的,mysql不会使用索引,也就是数据列使用了mysql提供的函数(因为mysql不知道你要对列做什么处理,所以mysql认为使用索引可能会降低效率),当然查询的数据值是可以使用函数的。

    如:id varchar;to_number(id)=1,不使用索引;id=to_number('1'),使用索引,但这种情况to_number可以写成id=1,mysql会做转换。———————————————————————————————————————————————————————

    3、前缀索引和索引选择性:有时候需要检索很长的字符,这样会让索引变得大且慢。此时我们可以检索开始的部分字符,从而可以提高索引效率、节省索引空间、降低索引的选择性不重复的索引值与数据表的记录总数的比值)。但MySQL无法使用前缀索引做ORDER BY和GROUP BY,也无法使用前缀索引做覆盖扫描。

    不重复的索引值与数据表的记录总数的比值:SELECT COUNT(DISTINCT LEFT(address, 3)) / COUNT(*) FROM address;

    比值越接近1,使用前缀索引的效率越好;我们可以这样计算来优化索引。

    select count(DISTINCT left(address,3)) / count(*),
        count(DISTINCT left(address,4)) / count(*),
        count(DISTINCT left(address,5)) / count(*),
        count(DISTINCT left(address,6)) / count(*),
        count(DISTINCT left(address,7)) / count(*),
        count(DISTINCT left(address,8)) / count(*),
        count(DISTINCT left(address,9)) / count(*),
        count(DISTINCT left(address,10)) / count(*)
    from address;

    最后选取一个比值与索引长度适中的作为索引的长度。

    ———————————————————————————————————————————————————————

    4、覆盖索引:一个索引包含所有需要查询的列,我们将这样的所有称为覆盖索引。

    如InnoDB二级索引存储了主键和索引列,我们使用Select id,name from tablename where name=’Rose’;时,那这个索引就是覆盖索引。

    ———————————————————————————————————————————————————————

    5、索引排序:mysql可以使用一个索引既满足排序,又可用于查找。

    ———————————————————————————————————————————————————————

    6、压缩索引:Myisam索引使用前缀压缩来减少索引的大小,从而可以让更多的索引放入内存中,某些情况下可以提高性能。

    ———————————————————————————————————————————————————————

    7、排除冗余和重复索引:MySQL允许在相同列上创建多个索引,无论是有意还是无意的。MySQL需要单独维护重复的索引,并且优化器在优化查询的时候也需要逐个进行考虑,这会影响性能。

    维护索引和表

    检查/修复损坏的表(CHECK TABLE / REPAIR TABLE)

    索引创建的选择

    • 频繁更新的字段不适合建立索引。
    • 参与列计算的列不适合建索引。
    • 数据重复且唯一性太差的字段不适合建立索引,例如:性别,真假值
    • 数据可以确定比较少的不需要建索引。
    • where条件中用不到的字段不适合建立索引。
  • 相关阅读:
    【Android學習專題】数据存储篇:SharedPreferences/Files/SDCard
    【My Sft】彩色图像分析软件V1.0.1.0
    【流媒體】Android 实时视频采集—Camera预览采集
    【流媒體】 Android 实时视频编码—H.264硬编码
    【资料整理】一些英语面试题整理
    【C/C++语法外功】sizeof
    【My Project】开关稳压电源第八届索尼杯全国大学生电子设计竞赛(2007)
    【Android學習專題】網絡通信篇:Socket TCP(简易聊天室)
    【Android學習專題】多媒體篇:MediaRecoder 实现录像机
    【流媒體】Android 实时视频采集—MediaRecoder录制
  • 原文地址:https://www.cnblogs.com/bzfsdr/p/12349252.html
Copyright © 2020-2023  润新知