1. 策略1.尽量全值匹配

CREATE TABLE `staffs`(

id int primary key auto_increment,

name varchar(24) not null default "" comment'姓名',

age int not null default 0 comment '年龄',

pos varchar(20) not null default ""  comment'职位',

add_time timestamp not null default current_timestamp comment '入职时间'

)charset utf8 comment '员工记录表';

insert into staffs(name,age,pos,add_time) values('z3',22,'manage',now());

insert into staffs(name,age,pos,add_time) values('july',23,'dev',now());

insert into staffs(name,age,pos,add_time) values('2000',23,'dev',now());

alter table staffs add index idx_staffs_nameAgePos(name,age,pos);

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July';

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July' AND age = 25;

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July' AND age = 25 AND pos = 'dev'

当建立了索引列后,能在wherel条件中使用索引的尽量所用。

2. 策略2.最佳左前缀法则

如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列(和顺序无关,但是不能丢)。

EXPLAIN SELECT * FROM staffs WHERE  age = 25 AND pos = 'dev'

EXPLAIN SELECT * FROM staffs WHERE pos = 'dev'

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July'

3. 策略3.不在索引列上做任何操作

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

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July';

EXPLAIN SELECT * FROM staffs WHERE left(NAME,4) = 'July';

4. 策略4.范围条件放最后

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July' ;

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July'  and age =22;

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July'  and age =22 and pos='manager'

中间有范围查询会导致后面的索引列全部失效

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July'  and age >22 and pos='manager'

5.策略5.覆盖索引尽量用

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

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July'  and age =22 and pos='manager'

EXPLAIN SELECT name,age,pos FROM staffs WHERE NAME = 'July'  and age =22 and pos='manager'

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July'  and age >22 and pos='manager'

EXPLAIN SELECT name,age,pos FROM staffs WHERE NAME = 'July'  and age >22 and pos='manager'

6.策略6.不等于要甚用

mysql 在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

EXPLAIN SELECT * FROM staffs WHERE NAME = 'July';

EXPLAIN SELECT * FROM staffs WHERE NAME != 'July';

EXPLAIN SELECT * FROM staffs WHERE NAME <> 'July';

如果定要需要使用不等于,请用覆盖索引

EXPLAIN SELECT name,age,pos FROM staffs WHERE NAME != 'July';

EXPLAIN SELECT name,age,pos FROM staffs WHERE NAME <> 'July';

7. 策略7.Null/Not 有影响

注意null/not null对索引的可能影响

7.1. 自定定义为NOT NULL

EXPLAIN select * from staffs where name is null

EXPLAIN select * from staffs where name is not null

在字段为not null的情况下,使用is null或is not null会导致索引失效

解决方式:覆盖索引

EXPLAIN select  name,age,pos from staffs where name is not null

7.2. 自定义为NULL或者不定义

EXPLAIN select * from staffs2 where name is null

EXPLAIN select * from staffs2 where name is not null

EXPLAIN select * from staffs2 where name is not null

Is not null 的情况会导致索引失效

解决方式:覆盖索引

EXPLAIN select  name,age,pos from staffs where name is not null

8. 策略8.Like查询要当心

like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作

EXPLAIN select * from staffs where name ='july'

EXPLAIN select * from staffs where name like '%july%'

EXPLAIN select * from staffs where name like '%july'

EXPLAIN select * from staffs where name like 'july%'

解决方式:覆盖索引

EXPLAIN select name,age,pos from staffs where name like '%july%'

9. 策略9.字符类型加引号

字符串不加单引号索引失效

EXPLAIN select * from staffs where name = 917

解决方式:覆盖索引

EXPLAIN select  name,age,pos from staffs where name = 917

解决方式:请加引号

10. 策略10.OR改UNION效率高

EXPLAIN

select * from staffs where name='July' or name = 'z3'

EXPLAIN

select * from staffs where name='July'

UNION

select * from staffs where  name = 'z3'

解决方式:覆盖索引

EXPLAIN

select name,age from staffs where name='July' or name = 'z3'

mysql 不等于 优化_Mysql优化相关推荐

  1. mysql字段优化_MySQL优化(1):字段的设计

    Web项目中,当Java或者Go等语言速度提升到瓶颈的时候,我们需要关心MySQL的优化 可以优化的方面有很多:设计表.负载均衡.读写分离.SQL语句优化等 (1)IP地址设计 例如我们需要存储IP地 ...

  2. 有关mysql的清理与优化_mysql优化点整理

    优化sql一般步骤: 1.通过show (session 或者 global) status 来查看( 当前连接 或者 数据库上次开机以来 )的服务器状态信息,默认是session 例如: show ...

  3. mysql 执行效率命令_MySQL优化--explain 分析sql语句执行效率

    MySQL优化--explain 分析sql语句执行效率 explain 命令 explain 命令在解决数据库性能上市第一推荐使用命令,大部分的性能问题可以通过此命令来简单解决,explain可以用 ...

  4. mysql执行计划重用_MySQL 优化之EXPLAN执行计划

    MySQL优化之EXPLAN执行计划 ** 备注 ** 本文改编自https://www.processon.com/view/5d4fe8f4e4b04399f5a0303e?fromnew=1#m ...

  5. mysql优化1001mysql优化_mysql优化之基础规范

    优化包含建表规约.SQL 规约.索引规约三个部分,每部分的每一条都有强制.建议两个级别,大家在参考时,根据自己的情况来权衡. 建表规约 [强制]:①存储引擎必须使用 InnoDB 解读:InnoDB ...

  6. mysql防止索引崩溃_MySQL优化之避免索引失效的方法

    在上一篇文章中,通过分析执行计划的字段说明,大体说了一下索引优化过程中的一些注意点,那么如何才能避免索引失效呢?本篇文章将来讨论这个问题. 避免索引失效的常见方法 1.对于复合索引的使用,应按照索引建 ...

  7. mysql+index组合索引_MySQL 优化之 index merge(索引合并)

    标签: MySQL5.0之前,一条语句中一个表只能使用一个索引,无法同时使用多个索引.但是从5.1开始,引入了 index merge 优化技术,对同一个表可以使用多个索引.理解了 index mer ...

  8. mysql改国标码_MySQL 优化实施方案

    优化的哲学 优化风险 优化设计到变更,变更就有风险 优化方向 在数据库优化上有两个主要方面:即安全与性能.(CAP) 安全 ---> 数据可持续性 一致 性能 ---> 数据的高性能访问 ...

  9. mysql 查询慢 分析_MySQL优化:定位慢查询的两种方法以及使用explain分析SQL

    一条SQL查询语句在经过MySQL查询优化器处理后会生成一个所谓的执行计划,这个执行计划展示了具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等. 本章的内容就 ...

  10. mysql结构优化_MySQL优化----数据库结构优化

    数据库结构优化 选择合适的数据类型 数据类型的选择,重点在于合适二字,如何确定选择的数据类型是否合适? 1.使用可以存下你的数据的最小的数据类型. 2.使用简单的数据类型.Int要比carchar类型 ...

最新文章

  1. LDO和DC-DC有什么不同?如何选型?
  2. 启动HBase抛出org.apache.hadoop.hbase.ClockOutOfSyncException异常:hmaster正常,节点hregionserver启动失败
  3. DOM和Diff算法你应该知道的那些事,快收藏!
  4. 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列
  5. TreeSet类的排序
  6. docker 部署Python项目 以及dockerfile文件的编写
  7. kali升级python3.6_kali下将Python2.x切换至Python3.x
  8. ASP.NET MVC Razor视图引擎
  9. layui date插件设置不能跨月查询
  10. java 用redis如何处理电商平台,秒杀、抢购超卖
  11. [CVE-2021-45105] Apache Log4j2 漏洞复现与原理详细分析
  12. python strftime时分秒_python如何把秒换成时分秒
  13. centos桌面版配置ip_CentOS7安装GNOME可视化界面和如何配置IP地址
  14. 随笔---Beego中的routers包个人的理解
  15. 如何把视频mp4转换mp3音乐
  16. LTE学习笔记3之物理层信道与信号
  17. 踩坑中:TypeError: unsupported operand type(s) for /: 'str' and 'int'
  18. 什么是gadget,以及64位libc如何泄露的问题
  19. 导入AAR报错 Failed to transform file 'xxx.aar' to match attributes {artifactType=jar}
  20. 【美】柯蒂斯·费思 - 海龟交易法则(2012年12月25日)

热门文章

  1. 基于Fruits-360水果数据集的TensorSpace神经网络3D可视化(水果识别可视化)
  2. linux QT 结束当前进程_Qt与Web混合开发(一)--简单使用
  3. WiFi技术概述:WiFi那些事
  4. 【前端静态资源托管库-CDN】BootCDN资源全线失效
  5. 席卷全球的大数据发展趋势需要什么?
  6. License information could not be obtained from Elasticsearch due to Error: Request Timeout after 300
  7. 从零开始写一个Jison解析器(2/10):学习解析器生成器parser generator的正确姿势
  8. ubuntu 16.04 Titanxp 安装cuda10.0 cudnn7.6 环境
  9. 古训良言 之 一百四十八
  10. 济南市公安局人口数据备份库项目(数据复制)之一