• 索引优化策略


    在表上创建索引后,如何使用到这些索引需要注意的问题。

     

    1.索引列上不能使用表达式或函数。

    例如:

    select * from users where upper(name)=’ABC';

    改成

    select * from users where  name=’ABC';

     

    2.前缀索引和索引列的选择性

    索引的选择性越高索引效率越高。

     

    3.联合索引

    如何选择索引列的顺序

    1.经常会被使用到的列优先

    联合索引的列索引顺序是从左到右使用的。

    2.选择性高的列优先

    选择性很差的列不宜放到最左边。比如状态列。

    3.宽度小的列优先

     

    4.覆盖索引

    索引中包含了所有查询的字段的情况的索引。

    优点:

    可以优化缓存,减少磁盘IO操作。

    可以减少随机IO 变随机IO为顺序IO操作。

    避免对INNODB主键索引的二次查询

    可以避免myisam表进行系统调用

    无法使用覆盖索引的情况:

    1.存储引擎不支持覆盖索引

    2.查询中使用了太多的列。

    3.使用了双%号的like查询

     

    5.使用索引扫描优化排序

      索引的列顺序和order by 子句的顺序完全一致

    索引中所有列的方向(升序和降序)和order by 子句完全一致

    order by 中 的字段全部在关联表中的第一张表中。

     

    6.利用索引优化锁

    1.索引可以减少锁定的行数

    2.索引可以加快处理速度,同时加快锁的释放。

     

    7.删除重复和冗余的索引

    重复的索引:

    比如:

    primary key(id),unique key (id) ,index (id);

    这样索引就重复了

    冗余的索引:

    index(name) ,index(name,age) 联合索引,那么 index(name) 就冗余了。

     

    可以使用工具

    pt-duplicate-key-checker –h=localhost 检查重复索引。

     

    查找未被使用过的索引:

     

    更新索引统计信息及减少索引碎片

    analyze table table_name;

  • 相关阅读:
    超实用的PHP代码片段
    推荐五款优秀的PHP代码重构工具
    PHP开发搜索引擎技术全解析
    怎样成为一名PHP专家?
    PHP中该怎样防止SQL注入?
    有关PHP 10条有用的建议
    fir.im Weekly
    可能是一场很 IN 的技术分享
    fir.im Weekly
    更新日志
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/5934087.html
Copyright © 2020-2023  润新知