优秀的编程知识分享平台

网站首页 > 技术文章 正文

MySQL 索引(单列索引, 组合索引, 全文索引)及索引失效

nanyue 2024-10-28 16:38:24 技术文章 4 ℃

索引是可以高效的获取数据的数据结构, 对查询有很大作用. 索引对于数据库, 就像偏旁部首, 或者26个英文字母对于字典一样, 能很快的提高查询速度.


但是索引也有它的缺点:

  • 首先就是占用磁盘空间
  • 其次是虽然提高了查询效率, 但是会降低表的更新效率, 因为进行增删改的时候都需要更新索引文件.

MySQL的索引分为以下几种:

  • 单列索引, 单列索引包括普通索引, 唯一索引主键索引. 普通索引纯粹是为了查询快, 允许重复和空值.
create index index_name on table (column(length));
alter table table_name add index index_name on column(length);

唯一索引, 唯一但允许为空.

create unique index index_name on table(column(length));

主键索引唯一, 不为空

  • 组合索引: 组合索引必须遵循最左匹配原则, 一般建议使用组合索引代替单列索引. 如果建了一个(columnA, columnB, columnC)的组合索引, 根据最左匹配原则, A, B, C, AB, ABC, BC都是起作用的.
  • 全文索引: 只有在MYISAM引擎上才能使用. 只能在CHAR, VARCHAR和TEXT类型上使用
create fulltext index index_name on table (column(length));

索引失效的几种情况:

  • 在索引列上做操作
  • !=, <>, is NULL, is not Null, like "%var", or
  • 字符串不加单引号(譬如是数字, 用数字进行比较)

  • mysql聚集索引和非聚集索引

    • 聚集索引是指索引值的顺序与数据的存储顺序一致, 通常是主键
    • 非聚集索引是指索引值的顺序与数据的存储顺序通常不一致, 如普通索引, 唯一索引, 联合索引等;
    • 如果一个表中存在主键, 那么该主键就为聚集索引;
    • 如果没有主键, 那么第一个非空索引为聚集索引;
    • 如果没有合适的索引, 那么InnoDB内部会生成一个隐藏的主键作为聚集索引, 该聚集索引是6个字节的列, 自增;

    MySQL相关文章推荐:

  • MySql 解析顺序
  • MySQL事务隔离级别
  • MySQL日志(错误日志, 二进制日志, 慢查询日志等)介绍
  • MySQL的多版本并发控制(MVCC)
  • MySQL 索引(单列索引, 组合索引, 全文索引)及索引失效
  • MySQL索引数据结构
  • MySQL char和varchar的区别
  • MySQL主从复制的过程及原理
  • MySQL优化
  • 最近发表
    标签列表