当前位置:首页 > 正文

mysql怎么使用索引_mysql怎么索引优化查询

更新时间:2025-02-10 16:05 阅读量:179

MySQL索引机制(详细+原理+解析)

MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度.但是前缀索引也有它的坏处:MySQL 不能在 ORDER BY 或 GROUP BY 中使用前缀索引,也不能把它们用作覆盖索引(Covering Index).

集一个索引包含多个列(最左前缀匹配原则)

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

全文索引为FUllText,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值,全文索引可以在CHAR,VARCHAR,TEXT类型列上创建

设定主键后数据会自动建立索引,InnoDB为聚簇索引

即一个索引只包含单个列,一个表可以有多个单列索引

覆盖索引是指一个查询语句的执行只用从所有就能够得到,不必从数据表中读取,覆盖索引不是索引树,是一个结果,当一条查询语句符合覆盖索引条件时候,MySQL只需要通过索引就可以返回查询所需要的数据,这样避免了查到索引后的回表操作,减少了I/O效率

查看索引

列名解析:

删除索引

查看:

删除前:

删除后:

普通的索引,没有什么介绍

查看:(注意和前缀索引Sub_part的区别)

当索引的列是unique的时候,会生成唯一索引,唯一索引关于null有下列两种情况

SQLSERVER 下的唯一索引的列,允许null值,但最多允许有一个空值

MYSQL下的唯一索引的列,允许null值,并且允许多个空值

查看:

会建立两个索引,一个非聚簇索引,一个是唯一索引

结果:

可以插入两个空值(明人不说暗话,我喜欢MySQL)

一方面,它不会索引所有字段所有字符,会减小索引树的大小.

另外一方面,索引只是为了区别出值,对于某些列,可能前几位区别很大,我们就可以使用前缀索引.

一般情况下某个前缀的选择性也是足够高的,足以满足查询性能.对于BLOB,TEXT,或者很长的VARCHAR类型的列,必须使用前缀索引,因为MySQL不允许索引这些列的完整长度.

复合索引的最左前缀匹配原则 :

对于复合索引,查询在一定条件才会使用该索引

在模糊搜索中很有效,搜索全文中的某一个字段,可以参考这篇博文

:

我们先进行下面一个实验看看InnoDB下的主键索引的一个现象.

我们插入进去的时候,数据的id都是乱序的,为什么这里最后select查询出来的结果都是进行了排序?

这是因为InnoDB索引底层实现的是B+tree,B+tree具有下列的特点:

所以上面的排序是为了使用B+tree的结构 ,B+tree为了范围搜索,将主键按照从小到大排序后,拆分成节点.后续还有新的节点进入的时候,和B-tree相同的操作,会进行分裂.

一般来说,聚簇索引的B+tree都是三层

InnoDB中主键索引一定是聚簇索引,聚簇索引一定是主键索引.

为什么这里辅助索引叶子结点不直接存储数据呢?

MYISAM只有非聚簇索引,索引最终指向的都是物理地址.

Q:既然有回表的存在,那么聚簇索引的优势在哪里?

Q:主键索引作为聚簇索引需要注意什么

在查询语句中使用LIke关键字进行查询时,如果匹配字符串的第一个字符为"%",索引不会使用.如果"%"不是在第一位,索引就会使用

多列索引是在表的多个字段上创建的索引,满足最左前缀匹配原则,索引才会被使用

查询语句只有Or关键字时候,如果OR前后的两个条件都是索引,这这次查询将会使用索引,否则Or前后有一个条件的列不是索引,那么查询中将不使用索引

mysql索引

在mysql中,索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录.

通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列即可.

通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列.否则,数据库系统将读取每条记录的所有信息进行匹配.

所以呢,使用索引可以很大程度上提高数据库的查询速度,还有效的提高了数据库系统的性能.

索引的优缺点

索引有其明显的优势,也有其不可避免的缺点.

优点

索引的优点如下:

①.、通过创建唯一索引可以保证数据库表中每一行数据的唯一性.

缺点

增加索引也有许多不利的方面,主要如下:

①.、创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加.

使用索引时,需要综合考虑索引的优点和缺点.

mysql 索引怎么使用

CREATE [UNIQUE] INDEX index_name ON table_name(字段 [ASC|DESC]);

UNIQUE --确保所有的索引列中的值都是可以区分的.

[ASC|DESC] --在列上按指定排序创建索引.

(创建索引的准则:

①如果表里有几百行记录则可以对其创建索引(表里的记录行数越多索引的效果就越明显).

)

示例

create index i_1 on emp(empno asc);

MySql是怎么使用的索引,在哪些情况下会使用

MySql为以下这些操作使用索引:

①.、为了快速查找匹配WHERE条件的行.

关于MySQL复合索引的使用方法

按照正常的逻辑,和复合索引的原则,应该能命中的索引是A_B_C_index,让我们拭目以待吧!

结果:和上次测试的不一致,这次虽然包含ABC三个列,但命中的索引是B_C_index

重要结论:当命中两个或者多个不同的复合索引时,按照创建顺序不同,MySQL会有不同策略来选取其中的一个复合索引.