MySql如何使用索引(一)

栏目: 数据库 · 发布时间: 5年前

内容简介:我们都知道在 MySql 中使用索引可以提高查询效率,但有时候真正执行Sql查询的时候却没有按照我们的预想使用索引,而是全表扫描,导致有慢Sql影响了整个网站的效率,甚至导致网站崩溃,所以我们需要了解Mysql是如何选择使用索引的,以便建立合适的索引 (本文基于MySql5.7,InnoDB引擎)假设有一张用户表我们建立了name,height,weight 的联合索引,插入测试数据

我们都知道在 MySql 中使用索引可以提高查询效率,但有时候真正执行 Sql 查询的时候却没有按照我们的预想使用索引,而是全表扫描,导致有慢Sql影响了整个网站的效率,甚至导致网站崩溃,所以我们需要了解Mysql是如何选择使用索引的,以便建立合适的索引 (本文基于MySql5.7,InnoDB引擎)

前提:建立一张测试表

假设有一张用户表

CREATE TABLE `test_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL DEFAULT '',
  `birthday` date NOT NULL,
  `sex` tinyint(1) DEFAULT NULL,
  `height` int(11) NOT NULL,
  `weight` int(11) NOT NULL,
  PRIMARY KEY (`user_id`),
  KEY `idx_name_height_weight` (`name`,`height`,`weight`),
  KEY `idx_height` (`height`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码

我们建立了name,height,weight 的联合索引,插入测试数据

INSERT INTO `test_user` (`user_id`, `name`, `birthday`, `sex`, `height`, `weight`)
VALUES
	(1, 'Tony', '1991-01-01', 1, 176, 65),
	(2, 'Mary', '1989-12-19', 2, 160, 50),
	(3, 'Tom', '1996-05-29', 1, 180, 70),
	(4, 'Kiven', '1994-08-09', 1, 190, 80),
	(5, 'John', '1992-11-12', 1, 182, 75);
复制代码

执行什么操作的时候Mysql会使用索引

查找与WHERE子句匹配的行

select * from test_user where name='mary'
复制代码

查看执行计划

MySql如何使用索引(一)

可见使用了idx_name_height_weight索引

从表中删除一行数据

DELETE from test_user where name='mary';
复制代码

查看执行计划

MySql如何使用索引(一)

查找索引列的MIN()或MAX()的值

SELECT MIN(height)  FROM `test_user`
复制代码
MySql如何使用索引(一)

这个和之前的执行计划不太一样,Select tables optimized away(选择要优化的表)实际就是优化到不能再优化的意思,在这种情况下,MySql把每个Key的MIN() 和 MAX()值替换成一个常量,如果查到了这个常量就立即返回,然后看下面的例子,分别在索引列上和非索引列上使用MIN()函数的执行计划:

SELECT MIN(height)  from `test_user` where height>=176 AND height<=190;
复制代码
MySql如何使用索引(一)
SELECT MIN(height)  from test_user where sex=1;
复制代码
MySql如何使用索引(一)

在索引列上执行 SORT 或 ORDER BY 操作

SELECT name,height from test_user ORDER BY `name` DESC;
复制代码
MySql如何使用索引(一)

注意SELECT的字段能匹配索引列,比如:

MySql如何使用索引(一)

将会出现Using filesort,Using filesort 是Mysql里一种速度比较慢的外部排序,应当尽量避免

本文讲述了MySql什么时候会使用索引,下章说明什么时候MySql不能使用索引,敬请期待


以上所述就是小编给大家介绍的《MySql如何使用索引(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS设计指南

CSS设计指南

史密斯 / 李松峰 / 人民邮电出版社 / 2013-5 / 59.00元

《图灵程序设计丛书:CSS设计指南(第3版)》是一本面向初中级读者的经典设计指南。全书共分8章,前4章分别介绍了HTML标记和文档结构、CSS工作原理、定位元素、字体和文本,对规则、声明、层叠、特指度、选择符等基本概念进行了详细解读。随后4章介绍了页面布局、界面组件,CSS3圆角、阴影、渐变、多背景等视觉设计技巧,最后还对如何实现最前沿的响应式设计进行了通俗易懂的演示。一起来看看 《CSS设计指南》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换