zoukankan      html  css  js  c++  java
  • MySQL索引(索引失效)

    索引

    索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

    myisam存储引擎,数据文件、索引文件、表结构文件分开存储

    innodb存储引擎,数据和索引存储在一个文件中

    B+tree索引

    hash索引

    hash索引(只有memory存储引擎支持),查找一条记录的速度非常快

    B+tree索引(Innodb和MyISAM支持),更适合排序等操作

    适合作索引的数据类型

    (1)较小的数据类型,需要更少的空间

    (2)简单的数据类型,整型比字符串开销小

    (3)避免使用null,null会导致索引失效

    主键索引

    唯一索引

    普通索引

    全文索引

    组合索引

    显示当前表的所有索引信息

    show index from tableNameG

    1.普通索引

    create index idx_name on tableName(colName(length))

    如果是char或者varchar length可以小于实际的长度,如果是blob和text 必须指定length

    alter table tableName add index idx_name(colName)

    drop index idx_name on tableName

    一张表可以有多个普通索引

    2. 唯一索引

    列的值必须唯一,允许用null值

    如果是组合索引,列的值的组合必须唯一

    create union index idx_name on tableName(colName)

    alter table table_name add unique idx_name(colName)

    一张表可以有多个唯一索引

    3.主键索引

    主键的数据类型最好为整型

    主键索引只能有一个

    主键列的值必须唯一并且不能是null

    自动增长的列一定是主键

    主键列不一定是自动增长的

    alter table tableName add primary key(col_name)

    4.全文索引

    innodb不支持

    alter table tableName add fulltext idx_name(col_name)

    索引失效

    1.最佳左前缀原则

      组合索引,不按索引定义时制定的顺序 的最左列开始

    2.like ‘%Z’ 

      like模糊查询时, 以%开头,导致索引失效

    3.范围之后全失效(> <)

      如果是主键或者索引列是整数,索引不会失效

    4.遇到null值,索引失效

    5.索引列上的显式或者隐式运算,导致索引失效

    6.order by

      由于查询只使用一个索引,因此,如果where语句使用了索引,order by语句不会使用

    7.不在一个方向的order by导致索引失效

      全asc 或 全desc

    8.组合索引,中间跳过了某一列,后面的列全失效

    9.is null is not null != <> 都会导致索引失效,如果这些用在主键列上,仍会使用索引

    10.字符串类型不加单引号,导致索引失效

      不加单引号,会有隐式的类型转化(索引列上的计算会导致索引失效)

    11.用or连接导致索引失效

      or条件有未建立索引的列导致索引失效

    应当避免select * ,使用覆盖索引

    count(1)或者count(col)代替count(*)

    列的可取值较少时,不建议使用索引(性别)

    使用char代替varchar

  • 相关阅读:
    使用Graphics合成带二维码和头像的分享图(小程序分享、App分享)
    04_关键字的作用
    03_线程
    02_进程
    01_命名规范
    WebApi的创建,部署,Oauth身份认证(三)
    WebApi的创建,部署,Oauth身份认证(二)
    WebApi的创建,部署,Oauth身份认证(一)
    Prism.Interactivity 和 Prism.Modularity 介绍
    Prism BindableBase 和 Commands 的介绍
  • 原文地址:https://www.cnblogs.com/duanjiapingjy/p/9416137.html
Copyright © 2011-2022 走看看