zoukankan      html  css  js  c++  java
  • 数据库索引-索引的优点、缺点、分类、不走索引的情况

    如果不了解数据库索引相关的知识,我们可能在写查询语句时就会浪费已有的索引,注意哪些情况会不走索引,我们在写查询语句时可以尽可能避免对应的场景。

    使用索引的优点

    1、提高数据搜索的速度;

    2、加快表与表之间的连接速度;

    3、使用分组或排序时,如果有索引,可以加快分组或排序的速度,从而提高搜索效率;

    4、主键索引和唯一索引可以保证每一行数据的唯一性,防止改动数据时对应错数据行。

     

    索引的缺点

    1、创建数据库时,需要花费时间去创建和维护索引;

    2、索引会占用存储空间;

    3、修改表的数据时,也需要动态维护索引。

    数据库索引的分类

    主键索引、唯一索引、普通索引、全文索引、组合索引

    主键索引:不能为空+不能重复+加速查询;

    唯一索引:不能重复+加速查询;

    普通索引:加速查询;

    全文索引:对文本的内容进行分词,进行搜索;

    组合索引:多列组成一个索引

    主键索引:PRIMARY KEY

    创建唯一索引:ALTER TABLE tableName ADD UNIQUE(字段名)

    创建普通索引:ALTER TABLE tableName ADD INDEX indexName(字段名)

    创建全文索引:ALTER TABLE tableName ADD FULLTEXT (字段名1,字段名2)

    创建组合索引:CREATE INDEX indexName ON tableName(col_name_1,col_name_2);

      

    删除索引:DORP INDEX indexName ON ‘tableName’

    不走索引的情况

    1、对索引列有不等于(!=、<>)的条件语句;

    2、对索引列使用函数的语句;

         例如:sname字段创建了索引

         WHERE concat(`sname`,'abc') ='Jaskeyabc' 不走索引

         WHERE `sname` =concat('Jaskey','abc') 走索引

    3、对索引列进行计算的语句;

         例如:age字段创建了索引

         那么where age +30=40,不走索引

         Where  age = 40-30,走索引

    4、模糊查询%放在前面的;

         模糊查询,%在前面,不走索引,%放末尾,走索引

    5、查询条件有or,但不是每个语句都创建了索引(不是每个条件都创建了索引,会导致所有索引都失效;如果每个条件都创建了索引,是走索引的);

    6、字符串列查询,对应的值没有使用引号;

         例如:a列是字符char类型,创建了索引

         WHERE `a`='1' -- 走索引

         WHERE `a`=1 -- 字符串和数字比较,不走索引

         但是如果那个列是一个数字类型,拿来和字符类型做比较,则不会影响到使用索引,但仍需尽量避免一切隐式类型转换

    7、组合索引,没有遵守最左匹配原则;

    8、MySQL认为全表扫描会比走索引快,它就会不走索引(这种情况一般不用理会,如果实在要让它走索引,可以使用 force index强制MySQL走索引)。

  • 相关阅读:
    生成纯数字随机编号的示例.sql
    程序员真的很懒
    (Coding for Concurrency).sql
    加载托管代码调试的扩展命令
    缺勤天数统计的处理示例.sql
    各种字符串合并处理示例.sql
    查询缺号分布情况的示例.sql
    控制CLR的调试
    UseCommandBehavior.cs
    Flat Icons & Icon Fonts
  • 原文地址:https://www.cnblogs.com/zocymo/p/14623251.html
Copyright © 2011-2022 走看看