mysql学习笔记-索引优化【1】-索引失效原因
索引失效应该避免
案例(索引失效)
# demo 数据
DROP TABLE IF EXISTS `staffs`;
CREATE TABLE `staffs` (`id` int(11) NOT NULL AUTO_INCREMENT,`NAME` varchar(24) NOT NULL COMMENT '姓名',`age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄',`pos` varchar(20) NOT NULL COMMENT '职位',`add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '入职时间',PRIMARY KEY (`id`),KEY `idx_staffs_nameAgePost` (`NAME`,`age`,`pos`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='员工记录表';-- ----------------------------
-- Records of staffs
-- ----------------------------
INSERT INTO `staffs` VALUES ('1', 'z3', '22', 'manager', '2020-03-14 15:28:53');
INSERT INTO `staffs` VALUES ('2', 'July', '23', 'dev', '2020-03-14 15:29:31');
INSERT INTO `staffs` VALUES ('3', '2000', '23', 'dev', '2020-03-14 15:29:46');
1.全值匹配我最爱
2.最佳左前缀法则
如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
3.不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
# 案例:不走索引
explain select * from staffs where left(name,4) ="July";
4.存储引擎不能使用索引中范围条件右边的列
# 案例:不走索引
explain select * from staffs where name = "July" and age > 25 and pos = "manage"
5.尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),
减少select *
6.mysql在使用不等于(!=或者<> )的时候无法使用索引会导致全表扫描
# 案例 :不会走索引
explain select * from staffs where name != 'July'
explain select * from staffs where name <> 'July'
7.is null ,is not null也无法使用索引I
#案例:不会走索引
explain select * from staffs where name is null
8.like以通配符开头(’%abc…)mysql索引失效会变成全表扫描的操作
# 案例:不会走索引
explain select * from staffs where name like '%July%';
# 案例:会走索引
explain select * from staffs where name like 'July%';
问题:
解决like '%字符串%'时索引不被使用的方法? ?
使用覆盖索引 >是指建立的复合索引的字段
测试数据
CREATE TABLE `tb1_user` (id INT (11) NOT NULL AUTO_INCREMENT,`NAME` VARCHAR (20) DEFAULT NULL,`age` INT (11) DEFAULT NULL,email VARCHAR (20) DEFAULT NULL,PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;INSERT INTO tb1_user(NAME ,age ,email) VALUES('1aa1',21,'b@163.com');
INSERT INTO tb1_user(NAME ,age,email) VALUES('2aa2' ,222,'a@163.com');
INSERT INTO tb1_user(NAME ,age,email) VALUES('3aa3' ,265, 'c@163.com');
INSERT INTO tb1_user(NAME ,age,email) VALUES('4aa4' ,21,'d@163.com');create index idx_user_nameAge on tb1_user(name,age);
# 使用覆盖索引
# 案例 :会走索引
explain select name,age from tb1_user where name like "%aa%";
# 案例: 不会走索引;因为email不是复合索引中的列;没有覆盖到
explain select name,age,email from tb1_user where name like "%aa%";
9.字符串不加单引号索引失效
# 案例 :不会走索引
explain select * from staffs where name = 2000;
# 案例 :会走索引
explain select * from staffs where name = '2000';
10.少用or,用它来连接时会索引失效
# 案例:不走索引
explain select * from staffs where name='July' OR name = 'z3';
mysql学习笔记-索引优化【1】-索引失效原因相关推荐
- mysql 学习笔记--存储引擎、索引、sq优化
全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...
- MySQL 学习笔记(18)— 索引的分类、创建、查看、删除等
1. 索引类型 1.1 唯一索引与非唯一索引 唯一索引( UNIQUE )中的索引值必须唯一,可以确保被索引的数据不会重复,从而实现数据的唯一性约束. 非唯一索引允许被索引的字段存在重复值,仅仅用于提 ...
- MySQL学习笔记(六)索引类别
1.普通索引 MySQL中最基本的索引类型,没有限制,允许重复,允许NULL CREATE INDEX index_code ON tb_student(code); 2.唯一索引 唯一索引跟普通索引 ...
- MySQL 学习笔记-第三篇-索引、存储过程和函数、视图、触发器
目录 1 索引 1.1 索引简介 1.2 创建索引 1.3 删除索引 1.4 MySQL 8.0 的新特性 1 -支持降序索引 1.5 MySQL 8.0 的新特性 2 -统计直方图 2 存储过程和函 ...
- MySQL学习笔记(五)—— 索引存储引擎
索引&存储引擎 一.MySQL存储引擎介绍 1.什么是数据库存储引擎 2.如何查看引擎 建表时指定引擎 修改表的引擎 **MyISAM和InnoDB的区别** 二.索引 1.什么是索引 2.索 ...
- JavaEE 企业级分布式高级架构师(六)MySQL学习笔记(6)
MySQL学习笔记 性能优化篇 性能优化的思路 慢查询日志 慢查询日志介绍 开启慢查询功能 演示一 演示二 分析慢查询日志 MySQL自带的mysqldumpslow 使用percona-toolki ...
- MySQL学习笔记-主键索引和二级索引
文章目录 MySQL学习笔记-主键索引和二级索引 1.笔记图 2.索引的常见模型 3.InnoDB 的索引模型 4.主键索引和普通索引查询的区别 5.如何选择主键字段 6.笔记图 7.回表过程 8.最 ...
- mysql,oracle数据库优化之索引
mysql,oracle数据库优化之索引,分库分表,表分区,本地索引,全局索引 数据库引擎 数据库索引 索引类型 主键索引 唯一索引 普通索引 全文索引 位图索引(oracle数据库才有) 在哪些列上 ...
- MySQL 学习笔记②
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru 资料链接 ...
- 数据库MySQL学习笔记高级篇(周阳)
数据库MySQL学习笔记高级篇 1. mysql的架构介绍 mysql简介 高级Mysql mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...
最新文章
- SQLServer之函数简介
- MAVEN项目环境搭建
- python 布尔值为f我的_python – 为什么我没有得到布尔值?
- java 数据包含_如何高效判断java数组是否包含某个值
- yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践
- HDOJ---2236 无题II[二分枚举+匈牙利]
- 阿里开源首个深度学习框架 X-Deep Learning!
- php excel header,【IT专家】PHP生成excel,方法一-header生成
- 漫画:从修灯泡来看各种 IT 岗位,你是哪一种?
- 网站显示网页加载时间代码-Typecho
- Android Studio 无法浏览插件市场
- 在datagrid中的toolbar添加输入框
- [Java] 蓝桥杯 BASIC-4 基础练习 数列特征
- SCWS中文分词,向xdb词库添加新词
- Netflix:如何打造开放协作的实时 ETL 平台?
- 如何实现一个无边框Form的移动和改变大小(一)
- 2015 年全国电赛题——风力摆控制系统(B 题)
- HDU 2122 Ice_cream’s world III
- git lfs linux,Git LFS(学习笔记)
- 如果我们遇上得州寒潮,会不会「悲剧」?
热门文章
- Markdown教程--Markdown代码
- 1309460-27-2,Ald-Ph-PEG4-acid苯甲醛基与酰肼和氨基氧基
- 浮云API 随机二次元图片接口开放文档 1w+数据
- 《宣州谢眺楼饯别校书叔云》赏析
- 【border相关】【P3426】 [POI2005]SZA-Template
- c语言跳马思路,跳马问题 - 日拱一卒的个人空间 - OSCHINA - 中文开源技术交流社区...
- 如何设置无线路由连接无线wifi
- 利用python绘制自定义棋盘格
- 百度智能云携手鄂尔多斯市:大数据赋能,让房子有了身份证会说话
- WIN10本地搭建APACHE+PHP运行环境