Mysql中的索引

Mysql中的索引分类

1.MySQL索引分为以下几种:
  • 1.唯一索引:一般用来保证字段唯一性,一般在主键和外键上应用。

  • 2.普通索引:早期的索引,一个表最多可以由32个索引,要求有唯一的索引,可以用来实现数据条件查询,为降低磁盘io操作,最好只在频繁查询的字段上做索引。

  • 3.全文索引: MySql提供的全文索引,可以进行全文检索,可以搜索出关联的词,最大的好处在于不受关键字的位置限制。

  • 4.空间索引:空间索引主要应用在空间数据检索上,它可以根据空间对象的空间特征(坐标、面积等)计算出一个空间索引号,有助于提高检索速度。

  • 5.哈希索引:哈希索引根据哈希函数(Hash Function)的结果计算出一个索引,查询的时候只需要根据索引找到要查询的行,比较适用于无条件查询的情况。


  • 6. B树索引: B树索引也称为btree,是一种在大型数据库中非常常见的索引结构,也是MySQL默认的索引类型,它是一颗平衡的树,具有查询效率高的特点,可以查询出数据库中某一部分数据。

2.MySQL索引的创建和使用原则

2.1, 创建索引的原则

  • 1、只有非常频繁的用于进行检索和排序操作的字段,才有必要创建索引;

  • 2、对于复合索引,应该把最值得检索的字段最先列出来;

  • 3、只有唯一性或集合性好的字段可以创建唯一或倒排索引;

  • 4、只有检索出来的数据量比较大时才能创建全文索引;

2.2, 使用索引的原则

  • 1、避免使用操作符,MySQL会在使用“>”、“<”、“>=”、“<=”等操作符时自动放弃使用索引;

  • 2、尽量使用精确查询,MySQL会在使用关键字模糊匹配时自动放弃使用索引;

  • 3、避免使用null,MySQL会在字段上有null值时自动放弃使用索引;

  • 4、尽量避免在复合索引字段上使用or,应该用union将两个子查询合并;

  • 5、当模糊查询结果比较多时,可以使用全文索引进行查询处理;

  • 6、不要对已经排序好的结果集使用order by,可在SQL语句末尾加上index_hint来指定索引;

  • 7、在多表联合查询时应尽量指定表间的索引关系;

3.MySQL索引没有被使用的情况

  • 1, 索引列出现了隐式类型转换,即在where中查询所用的条件和表中字段类型不一致。

  • 2, 在条件中使用了函数转换

  • 3, where 条件中使用了逻辑判断or,除非or中所有的列都是索引列,否则mysql不会使用索引

  • 4, 对于多列索引,若没有使用前导列,则mysql不会使用索引

  • 5, 如果mysql解释执行的优化器判断全表扫描比索引快,则mysql不会使用索引

  • 6, 如果对索引列字段进行函数,算数运算或者其他表达式等操作,mysql不会使用索引查询




posted @ 2023-02-13 12:35  我不知道取什么名字好  阅读(311)  评论(0编辑  收藏  举报