首页 > 数据库技术 > 详细

MySQL-索引分类及使用索引

时间:2019-09-18 23:55:41      阅读:157      评论:0      收藏:0      [点我收藏+]

1、什么是索引?

索引:存储引擎用于快速找到记录的一种数据结构,默认使用B-Tree索引。索引是存储引擎层中实现。

索引的目的:提高数据查询的效率,优化查询性能,就像书的目录一样。

 索引的常见模型:哈希表、有序数组、搜索树。

 InnoDB的索引模型:在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。InnoDB使用的是B+Tree 索引模型,所以数据都是存储在B+Tree树中的。

 

前提:假设一张表,有10W条数据,其中有一条数据是nickname=‘css’,查询这条数据sql:select * from table_award where nickname=‘css‘

没有索引:mysql全表扫描及扫描10W条数据找这条数据

有索引:  建立nickname字段索引,mysql只需要扫描这条nickname=‘css‘的数据

 

1.1 索引分类

索引主要包含5个部分:主索引、唯一索引、普通索引、全文索引、复合索引、单字段索引。其中主索引指主键自动的为主索引。

 

1.2 索引语法

建立索引:
CREATE [UNIQUE|FULLTEXT]  INDEX index_name ON tbl_name (col_name [(length)] [ASC | DESC] , …..);

ALTER TABLE table_name ADD INDEX [index_name] (index_col_name,...)

 

删除索引
DROP INDEX index_name ON tbl_name;
ALTER TABLE table_name DROP INDEX index_name;

 

查询索引:
SHOW INDEX FROM table_name;

SHOW KEYS FROM table_name;
DESC table_Name;

 

 

索引的分类、语法用文字的形式看起来已经麻木了,可以参考图文:索引分类为5个部分,索引操作语法3种(新增、删除、查询)。

 技术分享图片

 

 技术分享图片

 

 

 1.3 使用索引

提高性能优化的索引:覆盖索引、最左前缀索引、索引下推。

覆盖索引:可以减少树的搜索次数,显著提高查询性能。

 

使用索引

MATCH (col1,col2,...) AGAINST (expr).

查询要使用索引最重要的条件是查询条件中需要使用索引。

下列几种情况下有可能使用到索引:
1,对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。
2,对于使用like的查询,后面如果是常量并且只有%不在第一个字符,索引才可能被使用。
3,如果使用column_name is null将使用索引。

下列的表将不使用索引:
1,如果条件中有or,即使其中有条件有索引也不会使用。
2,对于多列索引,不是使用的第一部分,则不会使用索引。
3,like查询是以%开头
4,如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。
5,如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

 

1.4 查看索引的使用情况
show status like ‘Handler_read%’;
大家可以注意:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。

handler_read_rnd_next:这个值越高,说明查询低效。

 技术分享图片

 B-Tree索引通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同。

MySQL-索引分类及使用索引

原文:https://www.cnblogs.com/wendyw/p/11508998.html

(3)
(3)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!