mysql 索引笔记 (3)

使用联合索引进行查询时一定要遵循左前缀原则, 什么是左前缀原则呢? 就是说想让索引生效的话,一定要添加上第一个索引, 只使用第二个索引进行查询的话会导致索引失效

比如上面创建的联合索引, 假如我们的查询条件是 where id = '1' 或者 where id = '1' and title = '唐诗宋词' 索引都会不失效

但是如果我们不使用第一个索引id, 像这样 where title = '唐诗' , 结果就是导致索引失效

联合索引的分组&排序

还是使用这个例子:

CREATE TABLE `text` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`,`title`) ) ENGINE=InnoDB AUTO_INCREMENT=3691 DEFAULT CHARSET=utf8

demo1: 当我们像下面这样写sql时, 就会先按照id进行排序, 当id相同时,再按照title进行排序

select * form text order by id, title;

demo2: 当我们像下面这样写sql时, 就会先将id相同的划分为一组, 再将title相同的划分为一组

select id,title form text group by id, title;

demo3: ASC和DESC混用, 其实大家都知道底层使用B+树, 本身就是有序的, 要是不加限制的话,默认就是ASC, 反而是混着使用就使得索引失效

select * form text order by id ASC, title DESC; 如何定位慢查询

相关参数

名称 简介
slow_query_log   慢查询的开启状态  
slow_query_log_file   慢查询日志存储的位置  
long_query_time   查询超过多少秒才记录下来  

常用sql

# 查看mysql是否开启了慢查询 show variables like 'slow_query_log'; # 将全局变量设置为ON set global slow_query_log ='on'; # 查看慢查询日志存储的位置 show variables like 'slow_query_log_file'; # 查看规定的超过多少秒才被算作慢查询记录下来 show variables like 'long_query_time'; show variables like 'long_query%'; # 超过一秒就记录 , 每次修改这个配置都重新建立一次链接 set global long_query_time=1;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfdwz.html