MySQL高级 之 索引失效与优化详解

案例所用的表结构、索引、与数据如下:

 

索引失效与优化

1、全值匹配我最爱

2、最佳左前缀法则(带头索引不能死,中间索引不能断)

如果索引了多个列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始 并且 不跳过索引中的列。 
正确的示例参考上图。

错误的示例: 
带头索引死: 
 
中间索引断(带头索引生效,其他索引失效): 

3、不要在索引上做任何操作(计算、函数、自动/手动类型转换),不然会导致索引失效而转向全表扫描

4、mysql存储引擎不能继续使用索引中范围条件(bettween、<、>、in等)右边的列

5、尽量使用覆盖索引(只查询索引的列(索引列和查询列一致)),减少select *

6、索引字段上使用(!= 或者 < >)判断时,会导致索引失效而转向全表扫描

7、索引字段上使用 is null / is not null 判断时,会导致索引失效而转向全表扫描

8、索引字段使用like以通配符开头(‘%字符串’)时,会导致索引失效而转向全表扫描

 
由结果可知,like以通配符结束相当于范围查找,索引不会失效。与范围条件(bettween、<、>、in等)不同的是:不会导致右边的索引失效。

问题:解决like ‘%字符串%’时,索引失效问题的方法? 
使用覆盖索引可以解决。 
 

9、索引字段是字符串,但查询时不加单引号,会导致索引失效而转向全表扫描

10、索引字段使用 or 时,会导致索引失效而转向全表扫描

时间: 2024-11-10 01:36:22

MySQL高级 之 索引失效与优化详解的相关文章

MySQL数据库优化详解(收藏)

MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * from t1;mysql索引 ALTER TABLE用来创建普通索引.UNIQUE索引或PRIMARY KEY索引ALTER TABLE table_name ADD INDEX index_name (column_list)ALTER TABLE table_name ADD UNIQUE (colu

MySQL之SQL优化详解(三)

目录 MySQL 之SQL优化详解(三) 1. 索引优化 2. 剖析报告:Show Profile MySQL 之SQL优化详解(三) 1. 索引优化 一旦建立索引,select 查询语句的where条件要尽量符合最佳左前缀的原则,如若能做到全值匹配最好. 索引优化的第一个前提就是建好索引,第二个就是避免索引失效 索引失效的场景 如果索引了多列,要遵守最左前缀法则.指的是查询从索引的最左前列开始并且不跳过索引中的列 不在索引列上做任何操作(计算.函数.(自动or手动)类型转换),会导致索引失效而

MySQL之SQL优化详解(二)

目录 MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 3.2 索引分类 3.3 建与不建 4. 性能分析Explain MySQL之SQL优化详解(二) 1. SQL的执行顺序 1.1 手写顺序 1.2 机读顺序 2. 七种join 3. 索引 3.1 索引初探 是什么: 排好序的快速查找数据结构 两个主要的索引结构: B+tree 索引和哈希索引. 如何建: 1. ALTER TABLE table

Mysql高级之索引

原文:Mysql高级之索引 索引:是针对数据所建立的目录. 作用: 可以加快查询速度 负面影响: 降低了增删改的速度. 索引的创建原则: 1:不要过度索引 2:在where条件最频繁的列上加.在重复度高的列上不加,比如性别男女: 3:尽量索引散列值,过于集中的值加索引意义不大. 索引的类型 普通索引: index 仅仅是加快查询速度. 唯一索引: unique index 行上的值不能重复 主键索引: primary key 不能重复. 主键必唯一,但是唯一索引不一定是主键. 一张表上,只能有一

(转)SqlServer索引及优化详解(1)

(一)深入浅出理解索引结构 ??????? 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引).下面,我们举例来说明一下聚集索引和非聚集索引的区别: ??????? 其实,我们的汉语字典的正文本身就是一个聚集索引.比如,我们要查"安"字,就会很自然地翻开字典的前几页,因为"安"的拼音是&q

MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析

随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析.可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间.次数.占比等

MySQL-5.5.32 配置文件优化详解

MySQL-5.5.32 配置文件优化详解============================== [TOC] # 一.配置文件说明 > MySQL-5.5.32是Mysql5.5系列中最后一个版本,也是最后一个有配置文件的版本,为什么这么说呢,用过5.6的博友都知道,在mysql5.6中已经不提供配置文件选择,只有一个默认的配置文件,好了,我们今天说的是5.5.32这个版,就不和大家说5.6了,下面我们来具体说一下,mysql5.5.32中,提供可选的几个配置文件, * my-small.

lucene、lucene.NET详细使用与优化详解

lucene.lucene.NET详细使用与优化详解 2010-02-01 13:51:11 分类: Linux 1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品. 1.2 lucene能做什么要 回答这个问题,先要了解lucene的本质.实际上lucene的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜

Mysql Join语法解析与性能分析详解

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF