MYSQL无法使用索引的场景

设计优化–无法使用索引的场景

?通过索引扫描的记录数超过30%,变成全表扫描

?联合索引中,第一个索引列使用范围查询--只能用到部分索引

?联合索引中,第一个查询条件不是最左索引列

?模糊查询条件列最左以通配符% 开始

?内存表(HEAP 表)使用HASH索引时,使用范围检索或者ORDER BY

?两个独立索引,其中一个用于检索,一个用于排序--只能用到其中一个索引,5.6以上有ICP特性

?表关联字段类型不一样(也包括长度不一样)

?索引字段条件上使用函数

?

文章来源:刘俊涛的博客

地址:http://www.cnblogs.com/lovebing

时间: 2024-11-05 20:46:27

MYSQL无法使用索引的场景的相关文章

MySQL使用索引的场景及真正利用索引的SQL类型

1. 为什么使用索引 在无索引的情况下,MySQL会扫描整张表来查找符合sql条件的记录,其时间开销与表中数据量呈正相关.对关系型数据表中的某些字段建索引可以极大提高查询速度(当然,不同字段是否selective会导致这些字段建立的索引对查询速度的提升幅度不同,而且索引也并非越多越好,因为写入或删除时需要更新索引信息). 对于MySQL的Innodb储存引擎来说,大部分类型的index均以B-Tree数据结构的变种B+Tree来存储(MEMORY类型的表还支持hash类型的索引).B-Tree是

【MySQL笔记】MySQL使用索引的场景及真正利用索引的SQL类型

本笔记主要记录MySQL索引方面的内容,以便为实际工作中SQL优化提供参考. 1. 为什么使用索引 在无索引的情况下,MySQL会扫描整张表来查找符合sql条件的记录,其时间开销与表中数据量呈正相关.对关系型数据表中的某些字段建索引可以极大提高查询速度(当然,不同字段是否selective会导致这些字段建立的索引对查询速度的提升幅度不同,而且索引也并非越多越好,因为写入或删除时需要更新索引信息). 对于MySQL的Innodb储存引擎来说,大部分类型的index均以B-Tree数据结构的变种B+

【mysql】索引的优化

写在前面的话 查询容易,优化不易,且写且珍惜 mysql结构 从MySQL逻辑架构来看,MySQL有三层架构,第一层连接,第二层查询解析.分析.优化.视图.缓存,第三层,存储引擎 MySQL有哪些索引类型 ? 从数据结构角度 1.B+树索引(O(log(n))):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理 2.hash索引:a 仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询b 其检索效率非常高,索引

初始Mysql的索引

mysql的索引优化 近段时间在学习mysql,这篇博客就从以下三个方面谈谈对mysql的索引的理解.如有不足,还请留言交流. 一 为什么要用索引 一项技术的产生一定是为了解决某个问题,或者是迎合某项业务需求的.所以对于技术,我们就应该本着求真,严谨,热爱的态度来学习使用它.因为每项技术都凝结着无数人的智慧,在推动着社会的发展. 那么mysql的数据库中为什么要使用索引,以下面这个场景为例,假设数据库中有10万条图书数据,要根据书籍的作者查询一本书.以此来比较不使用索引和使用索引的查询速度. 创

mysql使用索引扫描来做排序

mysql有两种方式可以生成有序的结果,通过排序操作或者按照索引顺序扫描,如果explain的type列的值为index,则说明mysql使用了索引扫描来做排序(不要和extra列的Using index搞混了,那个是使用了覆盖索引查询).扫描索引本身是很快的,因为只需要从一条索引记录移动到紧接着的下一条记录,但如果索引不能覆盖查询所需的全部列,那就不得不扫描一条索引记录就回表查询一次对应的整行,这基本上都是随机IO,因此按索引顺序读取数据的速度通常要比顺序地全表扫描慢,尤其是在IO密集型的工作

mysql 中索引的限制

mysql中索引的限制 在使用索引的同时,还了解MySQL中索引存在的限制,以便在索引应用中尽可能地避开限制所带来的问题.下面列出了目前mysql中与索引使用相关的限制. 1)myisam存储引擎索引键长度的总和不能超过1000字节: 2)blob和text类型的列只能创建前缀索引: 3)mysql目前不支持函数索引: 4)使用不等于(!=或者<>)的时候,msyql无法使用索引: 5)过滤字段使用了函数运算(如abs(column))后,mysql无法使用索引: 6)join语句中join条

MySQL单列索引和组合索引的创建及区别介绍

MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有很多人还不是十分的了解,下面就为您分析两者的主要区别,供您参考学习. 为了形象地对比两者,再建一个表: CREATE TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_Schoo

MySQL中IN子查询会导致无法使用索引

原文:MySQL中IN子查询会导致无法使用索引 今天看到一个博客园的一篇关于MySQL的IN子查询优化的案例,一开始感觉有点半信半疑(如果是换做在SQL Server中,这种情况是绝对不可能的,后面会做一个简单的测试.)随后动手按照他说的做了一个表来测试验证,发现MySQL的IN子查询做的不好,确实会导致无法使用索引的情况(IN子查询无法使用所以,场景是MySQL,截止的版本是5.7.18) MySQL的测试环境 测试表如下 create table test_table2 ( id int a

MySQL之索引

要理解 mysql中索引是如何工作,最简单的方法就是看看一本书的"索引"部分(即目录).然后通过索引找到指定的页码. 在mysql中,存储引擎用类似的方法使用索引,首先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行. 在mysql中,索引是在存储引擎层而不是服务器层实现的. 索引的优点: 索引可以让服务器快速定位到表的指定位置,但这并不是索引的唯一作用,到目前为止可以看到,根据索引的数据结构不同, 索引页有一些附加作用. 最常见的b-tree索引,按照顺序存储数据,所以my