mysql索引

大憨熊 提交于 2020-02-03 18:10:45

索引类型分为

主键索引

  • 它是一种特殊的唯一索引,不允许有空值
  • 一般时在建表的时候同时创建主键索引

唯一索引

  • 索引列的值必须唯一,但允许有空值

普通索引

  • 最基本的索引,它没有任何限制

全文索引

  • fulltext是一种只适用于MyISAM表的一个索引类型
  • 被索引列的数据只能是以下三种的组合char、varchar、text
  • MySQL是通过match()和against()两个函数来实现他的全文索引查询的功能

组合索引

  • 也叫多列索引,就是在多列上同时创建索引,使得多列的组合值唯一,创建组合索引的好处是比分别创建多个单列索引的查询速度要快很多
  • 组合索引创建遵循“最左前缀”规则
  • 如三列:id,name,age创建组合索引,则相遇于分别创建了id、name、age;id、name;id这三个索引

——————————————————————————————————————————

索引创建规范

  • 索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间
  • 在插入与更新数据时,要重写索引文件
  • 单张表中索引数量不超过5个
  • 单个索引中的字段数不超过5个
  • 不使用更新频繁的列作为主键
  • 合理创建组合索引
  • 不在低基数列上建立索引,例如‘性别’
  • 不在索引列进行数学运算和函数运算,会使索引失效
  • 不使用%前导的查询,如like “%xxx” 无法使用索引
  • 不使用反向查询,如not in / not like ,无法使用索引,导致全表扫描
  • 选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中 占用的空间越少,处理起来更快
  • 在经常需要排序(order by),分组(group by)和distinct列上加索引(单独order by用不了索引,索引考虑加where或加limit)
  • 在表与表的连接条件上加上索引,可以加快连接查询的速度
  • 使用短索引,如果你的一个字段是Char(32)或者int(32),在创建索引的时候指定前缀长度,不如前10个字符(前提是多数值是唯一的)那么短索引可以提高查询速度,并且可以减少磁盘的空间,也可以减少I/O操作
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!