• 索引失效快速记忆


    索引失效快速记忆

      

      索引在平时数据库使用中会被我们经常用到,索引在查询的时候使用不当,这会严重影响到我们服务器数据查询的性能(主要是客户对系统的评价),那么索引失效的原因有哪些啦?如何能够快速记忆?

      有一个口诀:[模型][空运][最快](某种模型[索引失效]的信函、函件,只有空运才能最快到达目的地),下面将分别介绍每个字背后的意义。

      模(模糊查询)like的模糊查询以%开头,索引失效。比如:SELECT * FROM `room_info` WHERE `room_name` LIKE '%1-10%';

      型(数据类型不匹配)类型错误,如字段类型为varchar,where条件后的用number,索引也会失效。比如:SELECT * FROM `room_info` WHERE room_no= 101; room_no房间编号为varchar类型,查询使用integer类型导致索引失效。

      (查询索引字段使用函数)对索引的字段使用内部函数,索引也会失效。这种情况下应该建立基于函数的索引。比如:SELECT * FROM `room_info` WHERE DATE(create_time) = '2020-09-03';create_time字段设置索引,那就无法使用函数,否则索引失效。

      空(查询索引字段值为Null值)索引不应该存储空值,如果不限制索引列是not null,数据库会认为索引列有可能存在空值,所以不会按照索引进行计算。

        比如:

        SELECT * FROM `room_info` WHERE address IS NULL;不走索引。  

        SELECT * FROM `room_info` WHERE address IS NOT NULL;走索引。  

        建议大家这设计字段的时候,如果没有必要的要求必须为NULL,那么最好给个默认值空字符串(或者默认值),这可以解决很多后续的麻烦(切记)。

      运(对查询字段进行运算)对索引列进行(+,-,*,/,!, !=, <>)等运算,会导致索引失效。比如:SELECT * FROM `room_owner` WHERE age - 1 = 20;

      最(不遵循最左匹配原则)在复合索引中索引列的顺序至关重要。如果不是按照索引的最左列开始查找,则无法使用索引。

      快(全表扫描比走索引速度更快)如果数据库预计使用全表扫描要比使用索引快,则不使用索引。

    说明:以上索引失效的口诀主要是针对关系型数据库,newSQL数据库如TIDB、OceanBase等需要根据自身索引要求单独研究。 

  • 相关阅读:
    2019.8.30 玉米田
    2019暑假集训 最短路计数
    2019暑假集训 旅行计划
    2019暑假集训 文件压缩
    0033-数字和星期转换
    0032-分数等级转换
    0031-闰年判断
    0030-购买衣服
    0029-求最小的数
    0028-判断奇偶
  • 原文地址:https://www.cnblogs.com/yanzige/p/15821770.html
Copyright © 2020-2023  润新知