[MySQL]SQL优化之索引的使用规则

🌈键盘敲烂,年薪30万🌈

目录

一、索引失效

📕最左前缀法则

📕范围查询>

📕索引列运算,索引失效

📕前模糊匹配

📕or连接的条件

📕字符串类型不加 '' 

📕数据分布

📕is not null

二、SQL提示:

①建议索引

②强制索引

③忽略索引

三、覆盖索引

四、前缀索引 


一、索引失效

📕最左前缀法则

规则:

  1. 最左侧的列必须存在,如果不存在,索引失效,和位置无关!!!
  2. 从索引的最左侧开始,不能跳跃某一索引列,如果跳过某一列,那么后面的索引都会失效。

例如:

  • 有联合索引 id_name_age_gender (name字段为最左列)

遵循法则:select * from user where name = 'zhang' and age = 12 and gender = 1;

遵循法则:select * from user where age = 10 and name = 'zhang';

不遵循法则:select * from user where age = 10 and gender = 1;

📕范围查询>

范围查询右侧的列索引失效

例如: > < 号会使索引失效

select * from user where age > 10;

 故:

尽量使用 >= 或者 <=

📕索引列运算,索引失效

对索引列进行运算,索引失效,因为运算完之后新的数据不具有索引结构

select * from user where substring(name, 0 ,2) = 'zh';

 

📕前模糊匹配

%在最左侧索引失效

索引失效:select * from user where name like '%hang';

索引不失效:select * from user where name like 'zhan%';

📕or连接的条件

使用or连接的字段索引都会失效

select * from user where id = 1 or name = 'zhang';
📕字符串类型不加 '' 

如果数据库字段类型为varchar 但是查询每加'',索引失效

select * from user where name = zhang;
📕数据分布

如果MySQL经过判断之后发现全表扫描比按索引查询快,就会走全表扫描

📕is not null

如果一列数据基本没有null,is not null就会使索引失效

二、SQL提示:

例如:有两个索引 id_name_age   id_name

执行:select * from user where name = 'zhang';

会走哪个索引呢❓

  • 这时mysql经过优化后会选择一个索引,但是性能不一定最佳,因此可以指定索引。
①建议索引
select * from user use index(id_name) where name = 'zhang';

注意:提出的建议,mysql不一定听。 

②强制索引
select * from user force index(id_name) where name = 'zhang';
③忽略索引
selct * from user ignore index(id_name_age) where name = 'zhang';

三、覆盖索引

查询使用了索引,并且查询的字段 (select 后面的字段) 在该索引中可以全部找到。

例如:

  • 回表查询

故:

尽量避免使用select * ,这很容易导致回表查询。

四、前缀索引 

可以将字符串的一部分抽取出来作为前缀创建索引

例如:选取前4个字符作为name字段的索引

create index id_name on user(name(4));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/266217.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring】@SpringBootApplication注解解析

前言&#xff1a; 当我们第一次创建一个springboot工程时&#xff0c;我们会对启动类&#xff08;xxxApplication&#xff09;有许多困惑&#xff0c;为什么只要运行启动类我们在项目中自定义的bean无需配置类配置&#xff0c;扫描就能自动注入到IOC容器中&#xff1f;为什么我…

数据结构与算法-Rust 版读书笔记-2线性数据结构-双端队列

数据结构与算法-Rust 版读书笔记-2线性数据结构-双端队列 1、双端队列 deque又称为双端队列&#xff0c;双端队列是与队列类似的项的有序集合。deque有两个端部&#xff1a;首端和尾端。deque不同于队列的地方就在于项的添加和删除是不受限制的&#xff0c;既可以从首尾两端添…

基于JavaWeb+SpringBoot+Vue在线拍卖系统的设计和实现

基于JavaWebSpringBootVue在线拍卖系统系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 1 Abstract 1 1 系统概述 4 1.1 概述 4 1.2课题意义 4 1.3 主要内容 4 2 …

二叉树题目:在受污染的二叉树中查找元素

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;在受污染的二叉树中查找元素 出处&#xff1a;1261. 在受污染的二叉树中查找元素 难度 5 级 题目描述 要求…

12.11

1.q&#xff0c;w&#xff0c;e亮led1&#xff0c;2&#xff0c;3&#xff1b; a&#xff0c;s&#xff0c;d灭led1&#xff0c;2&#xff0c;3&#xff1b; main.c #include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i0;i<ms;i){for…

WampServer本地部署结合内网穿透实现公网访问本地服务

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

Altair Radioss碰撞 安全与冲击 衡祖仿真

Altair Radioss是解决瞬态加载工况下非线性问题的领先的结构分析求解器。其具备高扩展性、高品质、高鲁棒性&#xff0c;以及诸多功能&#xff1a;多域求解技术、高级材料功能(复合材料)等。Radioss求解器被广泛应用于汽车、航空航天、电子/家电、包装、轨道机车、生物医疗、能…

GoEasy使用手册

GoEasy官网 登录 - GoEasy 即时通讯聊天案例 GoEasy - GoEasy (gitee.com) 注意事项 接口使用人数上限为15&#xff0c;超出之后会请求超时返回408状态码&#xff0c;可以新建一个应用用来更换common Key 创建应用 ​ 添加应用名称&#xff0c;其余默认&#xff0c;点击…

【计算机网络】UDP报文详解

目录 一. UDP协议概述 二. UDP报文格式 首部 三. UDP的缓冲区 一. UDP协议概述 UDP——用户数据报协议&#xff0c;是传输层的一个重要协议 基于UDP的应用层协议有&#xff1a;DNS&#xff0c;TFTP&#xff0c;SNMP&#xff0c;NTP 协议全称默认端口号DNSDomain Name Se…

向宇的博客免责声明

文章目录 前言起因个人叠甲关于原创讨论对大家的一些话对CSDN的话学习群参与人员最后完结 前言 大家好&#xff0c;其实这里就只是我拿来记录自己的学习笔记的&#xff0c;但是随着关注度越来越高&#xff0c;发现我不能像之前那么随意了&#xff0c;想分享什么写什么&#xf…

python期末简答题及答案,python期末题库和答案

本篇文章给大家谈谈python期末简答题及答案&#xff0c;以及python期末题库和答案&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 期末复习判断题 &#xff08; √ &#xff09;Python变量名区分大小写,所以student和Student不是同一个变量。&#xff08; &…

王道数据结构课后代码题p150 第13——17 (c语言代码实现)

目录 13.p 和 q 分别为指向该二叉树中任意两个结点的指针&#xff0c;试编写算法 ANCESTOR(ROOT,P,q,r)&#xff0c;找到P和q的最近公共祖先结点 r 14.假设二叉树采用二叉链表存储结构&#xff0c;设计一个算法&#xff0c;求非空二叉树 b的宽度(即具有结点数最多的那一层的结点…