MySQL索引的使用

Mysql 索引的使用 如何避免索引失效 Mysql 索引的使用 如何避免索引失效 文章目录Mysql 索引的使用 如何避免索引失效1, 全值匹配2,最左前缀法则3,范围查询,右边的列,不能使用索引4,在某一列上使用了运算操作,索引将失效5,字符串不加单引号,造成索引失效6,尽量使用覆盖索引,避免select *7,用or分割的条件8,以%开头的like模糊查询,索引失效9,如果MySQL评估使用索引比全表扫描更慢,则不使用索引10,is... 阅读详情

准备环境

create table tb_seller (
sellerid varchar (100),
name varchar (100),
nickname varchar (50),
password varchar (60),
status varchar (1),
address varchar (100),
createtime datetime,
primary key(sellerid)
)engine=innodb default charset=utf8mb4;

insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘alibaba’,‘阿里巴巴’,‘阿里小店’,‘e10adc3949ba59abbe56e057f20f883e’,‘1’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘baidu’,‘百度科技有限公司’,‘百度小店’,‘e10adc3949ba59abbe56e057f20f883e’,‘1’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘huawei’,‘华为科技有限公司’,‘华为小店’,‘e10adc3949ba59abbe56e057f20f883e’,‘0’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘itcast’,‘传智播客教育科技有限公司’,‘传智播客’,‘e10adc3949ba59abbe56e057f20f883e’,‘1’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘itheima’,‘黑马程序员’,‘黑马程序员’,‘e10adc3949ba59abbe56e057f20f883e’,‘0’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘luoji’,‘罗技科技有限公司’,‘罗技小店’,‘e10adc3949ba59abbe56e057f20f883e’,‘1’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘oppo’,‘OPPO科技有限公司’,‘OPPO官方旗舰店’,‘e10adc3949ba59abbe56e057f20f883e’,‘0’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘ourpalm’,‘掌趣科技股份有限公司’,‘掌趣小店’,‘e10adc3949ba59abbe56e057f20f883e’,‘1’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘qiandu’,‘千度科技’,‘千度小店’,‘e10adc3949ba59abbe56e057f20f883e’,‘2’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘sina’,‘新浪科技有限公司’,‘新浪官方旗舰店’,‘e10adc3949ba59abbe56e057f20f883e’,‘1’,‘北京市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘xiaomi’,‘小米科技’,‘小米官方旗舰店’,‘e10adc3949ba59abbe56e057f20f883e’,‘1’,‘西安市’,‘2088-01-01 12:00:00’);
insert into tb_seller (sellerid, name, nickname, password, status, address, createtime) values(‘yijia’,‘宜家家居’,‘宜家家居旗舰店’,‘e10adc3949ba59abbe56e057f20f883e’,‘1’,‘北京市’,‘2088-01-01 12:00:00’);

创建索引 :
create index idx_seller_name_sta_addr on tb_seller(name,status,address);

避免索引失效

  1. 全值匹配,对索引列中所有的列都指定具体指。该情况下,索引生效,执行效率高
    eg:
    select * from tb_seller where name=‘小米科技’ and status=‘1’ and address=‘北京市’\G;
    在这里插入图片描述
  2. 最左前缀法则
    如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始,并且不跳过索引中的列。
    eg:
    select * from tb_seller where name=‘小米科技’ ;
    select * from tb_seller where name=‘小米科技’ and status=‘1’;
    select * from tb_seller where name=‘小米科技’ and status=‘1’ and address=‘北京市’;
    匹配最左前缀法则,走索引:
    在这里插入图片描述

select * from tb_seller where status=‘1’ ;
select * from tb_seller where and status=‘1’ and address=‘北京市’;
违反最左前缀法则,索引失效
在这里插入图片描述
select * from tb_seller where name=‘小米科技’ and address=‘北京市’;
符合最左法则,但是出现跳跃都一列,只有最左列索引生效:
在这里插入图片描述
3. 范围查询右边的列,不能使用索引
select * from tb_seller where name=‘小米科技’ and status>‘1’ and address=‘北京市’;

在这里插入图片描述
根据前面的两个字段name,status查询是走索引 的,但是最后一个条件adress没有用到索引

  1. 不要在索引列上进行运算操作,索引将失效
    select * from tb_seller where substring(name,3,2) =‘科技’ ;
    在这里插入图片描述

  2. 字符串不加单引号,造成索引失效
    select * from tb_seller where name=‘小米科技’ and status = 0 ;
    在这里插入图片描述
    由于,在查询时,没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转换,造成索引失效。

  3. 尽量使用覆盖索引,避免 select *

尽量使用覆盖索引(只访问索引的查询(索引列完全包含查询列)),减少 select *
在这里插入图片描述
如果查询列,超出索引列,也会降低性能。
eg:
select status,address,password from tb_seller where name=‘小米科技’ and status=‘1’ and address=‘北京市’;
(password不在索引列)
在这里插入图片描述
TIP :

using index :使用覆盖索引的时候就会出现

using where:在查找使用索引的情况下,需要回表去查询所需的数据

using index condition:查找使用了索引,但是需要回表查询数据

using index ; using where:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

  1. 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。
    eg: name字段是索引列,而createtime不是索引列,中间是or进行连接是不走索引的
    select * from tb_seller where name=‘黑马程序员’ or createtime = ‘2088-01-01 12:00:00’\G;
    在这里插入图片描述
  2. 以%开头的like模糊查询,索引失效
    如果仅仅是尾部模糊匹配,索引不会失效,如果是头部模糊匹配,索引失效。
    在这里插入图片描述
    解决方案:
    通过覆盖索引来解决
    select sellerid from tb_seller where name like ‘%科技%’ ;
    select sellerid,name from tb_seller where name like ‘%科技%’ ;
    select sellerid ,name ,status ,adress from tb_seller where name like ‘%科技%’ ;
    在这里插入图片描述
  3. 如果MySQL评估使用索引比全表扫描更慢,则不适用索引
    在这里插入图片描述
  4. is NULL , is NOT NULL 有时索引失效。
    在这里插入图片描述
  5. in 走索引, not in 索引失效。
    在这里插入图片描述
    12.单列索引和复合索引。
    尽量使用复合索引,而少使用单列索引。
    创建复合索引
    create index idx_name_sta_address on tb_seller(name, status, address);

就相当于创建了三个索引 :
name
name + status
name + status + address

创建单列索引
create index idx_seller_name on tb_seller(name);
create index idx_seller_status on tb_seller(status);
create index idx_seller_address on tb_seller(address);

数据库会选择一个最优的索引(辨识度最高索引)来使用,并不会使用全部索引 。

单相变换器的二次纹波分析 1. 单相PWM整流器的二次纹波产生原因   单相变换器的二次纹波产生的原因是功率含有二次脉动分量。设电网电压 us=Vmsin(wt),电网电流IL=Imsin(wt−θ)I_L=I_msin(wt-\theta)IL​=Im​sin(wt−θ)。其中w是电网电压披绿,θ\thetaθ是电流之后电压相位。保证输入功率和输出功率相等,就要保证两者的直流量和交流量对应相等。   uDu_DuD​为 PWM 整流器直流电容电压平均值,IoI_oIo​ 为负载电流平均值 ,uDC^\widehat {u_{DC} 阅读详情

相关推荐

告别机载网络通信混乱:利用ARINC825的LCC与带宽管理机制构建高可靠CAN总线

本文深入探讨了ARINC825规范如何通过逻辑通信通道(LCC)和带宽管理机制解决机载CAN总线通信的混乱问题。文章详细解析了ARINC825的核心架构设计、LCC工程实现、时间触发带宽管理等关键技术,展示了其在提升航空电子系统可靠性和实时性方面的显著效果,为现代飞机通信系统提供了高可靠解决方案。

weixin_26878995的博客 241

sql 索引 详解并举例

一般来说,选择经常被查询的列作为索引列是比较合理的,例如经常在WHERE子句或JOIN操作中使用的列。同时,还需要考虑索引的选择性,即索引列的值的唯一性程度。此外,索引的维护也很重要,包括定期重新构建和重新组织索引,以确保索引的效率和一致性。需要注意的是,索引并非适用于所有情况。总之,SQL索引是提高数据库查询性能的重要工具,通过适当地选择和使用索引,可以显著加快查询速度,并提升数据库系统的整体性能。由于我们创建了"email"列的索引,数据库引擎可以使用该索引快速定位并返回匹配的行,而不必扫描整个表。

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒 2273

F5 Shape盾JSVMP核心检测点与无限并发Header生成实战(TikTok/航司)

本文深入剖析了F5 Shape盾结合JSVMP技术的核心风控机制,详细解读了其针对浏览器指纹、行为时序等多维度的检测逻辑。通过实战案例,分享了如何通过逆向分析、精准Hook关键检测点,并构建稳定、高并发的请求Header生成方案,以应对TikTok、航司等平台的高级反爬挑战。

weixin_29325007的博客 1012

SQL索引的使用

通过explain , 查看执行计划,执行SQL时是否使用索引 1.避免索引失效 1). 全值匹配 ,对索引中所有列都指定具体值。 该情况下,索引生效,执行效率高。 2). 最左前缀法则 如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。 匹配最左前缀法则,走索引: 违背最左前缀法则 , 索引失效: 如果符合最左法则,但是出现跳跃某一列,只有最...

笑看人生的博客 2096

完整IC设计流程解析&Makefile学习

本文介绍了decorder38项目的文件结构、自动化综合流程和Makefile使用方法。项目包含RTL到GDSII全流程文件,重点关注syn目录中的综合脚本。通过make dc命令运行综合流程,生成网表、约束和时序文件。关键报告如qor.rpt、area.rpt和min_vio.rpt用于分析综合质量、面积和时序。Makefile部分解释了其基本语法、IC设计中的典型结构,包括目标定义、命令执行和特殊声明,强调了其在自动化构建和依赖管理中的重要性。

m0_63352623的博客 855

暗黑破坏神2重制版 mod制作教程(一)

暗黑2重制版mod修改教程

hhhh2312的博客 7452

SQL-索引的使用

3.1 索引的使用:索引使用时满足最左前缀匹配原则,即对于组合索引(col1, col2),在不考虑引擎优化时,条件必须是col1在前col2在后,或者只使用col1,索引才会生效;在列上进行运算后不会使用索引,如year(start_time)<2020不会使用start_time上的索引。一个查询只使用一次索引,where中如果使用了索引,order by就不会使用。like做字段比较时只有前缀确定时才会使用索引。索引创建、删除与使用:(注意:要使用大写)索引不包含有NULL值的列。

weixin_42060331的博客 1026

RK3399平台开发系列讲解(内核入门篇)1.1、通过sysfs清楚了解设备的系统状况

文章目录1、不敢高声语,恐惊天上人:sysfs目的2、窥一斑而知全豹:sysfs目录介绍3、千丝万缕:sysfs中要素的关系4、数据观星:sysfs中相关结构体 1、不敢高声语,恐惊天上人:sysfs目的 我们想通过sys下面的目录和文件清楚的了解跑Liunx系统的嵌入式设备的系统状况。 2、窥一斑而知全豹:sysfs目录介绍 sysfs把连接在系统上的设备和总线组织成为一个分级的文件,它们可以由用户空间存取,向用户空间导出内核的数据结构以及它们的属性。sysfs的一个目的就是展示设备驱动模型中各组件.

内核笔记 1万+

sql索引的介绍及使用规则

sql索引的介绍及使用规则

qq_56578523的博客 3万+

【TC3xx芯片】TC3xx芯片STM介绍

TC3xx芯片STM介绍

qq_36056498的博客 2280

Transformer实战(33)——高效自注意力机制

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担,介绍了高效的稀疏 Transformer 模型,通过近似技术(如 Linformer、BigBird 和 Performer) 用稀疏矩阵替代全自注意力矩阵。并观察它们在各种基准测试中的表现,例如计算复杂度和内存复杂度。结果表明,这些方法可以在不牺牲性能的情况下将平方级复杂度降低到线性复杂度。

盼小辉丶的博客 3039

mysql基本用法

创建数据库 CREATE DATABASE database_name; 删除数据库 DROP DATABASE table_name;    创建表 CREATE TABLE `tab_charpter28` ( `id` int(11) NOT NULL COMMENT '主键id', `bid` int(11) NOT NULL CO...

工作中学习,学习中进步 161

【制作100个Unity游戏之36】用unity从零开始实现类《开心消消乐》的三消类消除解压小游戏

Unity甜品消除游戏开发摘要 本文介绍了使用Unity开发甜品消除游戏的核心实现步骤: 冰块阵列生成 通过GlobalDef定义全局参数(9行7列网格) IceSpawner脚本动态生成网格化冰块阵列 添加Resolution脚本实现多分辨率适配 随机水果生成 创建FruitSpawner作为水果容器 FruitItem脚本管理水果属性(行列索引、类型) 支持动态创建水果精灵并设置位置 关键技术点 使用Instantiate动态生成预制体 通过localPosition精确控制网格布局 分辨率适配算法保持

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1291

MySQL索引创建及使用

背景 最近在深化学习数据库相关知识,借此机会总结记录一番,本来想自己总结概括一下,但是看到一篇写的简洁明了的博客,为节约时间就直接搬运过来了,有些地方加入一些自己的见解。 https://blog.youkuaiyun.com/xluren/article/details/32746183 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL...

程序人生 9万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【MySQL】索引

【MySQL】索引。本期【MySQL】讲解MySQL中索引的概念,什么是索引,为什么要有索引,以及MySQL如何做到和磁盘交互,使得数据持久化,还将会展示MySQL索引的相关操作。

jupangMZ的博客 2223

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL:索引02——使用索引

MySQL——使用索引

2401_83595513的博客 1977

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MySQL怎么决定使用哪个索引_MySQL 是如何利用索引的

阅读本文大概需要 4 分钟。一、前言在 MySQL 中进行 SQL 优化的时候,经常会在一些情况下,对 MySQL 能否利用索引有一些迷惑。例如:MySQL 在遇到范围查询条件的时候就停止匹配了,那么到底是哪些范围条件?MySQL 在 LIKE 进行模糊匹配的时候又是如何利用索引的呢?MySQL 到底在怎么样的情况下能够利用索引进行排序?今天,我将会用一个模型,把这些问题都一一解答,让你对 MyS...

weixin_30391889的博客 2532

MySql索引使用

在 MySQL 中,索引的优先级是根据查询优化器的选择逻辑来确定的,它会根据查询的复杂性、表的大小和索引的统计信息等因素来评估索引的使用。3,复合索引:如果查询条件中包含了多个列的条件,并且这些列上存在复合索引,那么优化器有可能会选择这个复合索引来执行查询。5,定期审查和优化索引:随着数据的变化和查询需求的变化,你可能需要调整或删除一些不再需要的索引。2,范围匹配索引:如果查询条件中包含了针对某个列的范围查询(如大于、小于、区间等),并且这个列上存在索引,那么优化器有可能会选择该索引来执行查询。

weixin_49200545的博客 1064

MySQL索引

MySQL系列: 1.了解索引 2.以B+树为索引数据结构的原因 2.1 Hash 索引 2.2二叉搜索树 (BST) 索引 2.3数据结构: N 叉树(例如 B 树) 2.4数据结构: B+ 树 2.5为什么 B+ 树是数据库索引的首选 3.MySQL页 3.1使用页的原因 3. 2页的结构概览 3.3页文件头和页文件尾 3.4页主体 3.5 页目录: 3.6数据页头 4.索引分类 4.1 主键索引(Primary Key Index) 4.2 普通索引(Secondary Index / Non-Uni

2401_85487314的博客 1207

【Mysql】 MySQL索引的使用

在处理大量数据的系统中,如何快速准确的获取所需的信息是一个重要的问题。这就像在一个巨大的图书馆中寻找一本书,如果没有目录或指南,这将是一项艰巨的任务。在数据库中,我们使用索引来解决这个问题。本文将介绍MySQL中索引的使用。索引是提高MySQL查询性能的重要工具,但是并不是所有的情况下都应该使用索引。索引虽然可以提高查询速度,但是创建和维护索引需要消耗存储空间和处理时间。因此,是否以及如何创建索引需要根据具体的应用场景和需求来决定。希望本文能帮助你更好地理解和使用MySQL索引。

tr6666的博客 1002

MySQL如何使用索引

MySQL如何使用索引? 索引用于快速找出在某个列中有一特定值的行。对相关列使用索引是提高 SELECT 操作 性能的最佳途径。 查询要使用索引最主要的条件是查询条件中需要使用索引关键字,如果是多列索引,那 么只有查询条件使用了多列关键字最左边的前缀时,才可以使用索引,否则将不能使用索引。 1.使用索引 在 MySQL 中,下列几种情况下有可能使用到索引。 (1)对于创建的多列索引,只要查询的条件中用到了最左边的列,索引一般就会被使用, 举例说明如下。 首先按company_id,moneys的顺序创建一

felix 1637

MYSQL索引的使用

索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下:从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引从应用层次划分:普通索引、唯一索引、主键索引、复合索引从索引键值类型划分:主键索引、辅助索引(二级索引)从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)

熊浪的博客 3057

MySQL 中使用索引

MySQL索引创建与优化指南 索引会生成索引树,占用磁盘空间并影响增删改效率。MySQL自动为主键、外键和唯一约束创建索引,未指定约束时则自动为每列生成ROW_ID索引。手动创建索引包括主键索引、唯一索引和普通索引,可通过建表时指定、修改表结构或单独创建等方式实现。复合索引可指定多列组合。 使用SHOW INDEX或EXPLAIN可查看索引和执行计划,判断SQL是否走索引。优化建议:优先高频查询列建索引,避免过多索引影响性能,注意复合索引的最左前缀原则。索引覆盖(Extra列显示Using index)……

Y409001的博客 1367

mysql 索引 如何使用_mysql索引的使用

什么是索引?为什么要建立索引?索引分类?索引的使用?转载SQL(五) MySQL中的索引详讲一、索引介绍:索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大查询数据所花费的时间就越多。如果表中查询的列有索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。例如:有一张person表,...

weixin_36397256的博客 180

mysql中索引的使用_MySQL中索引的使用

索引的定义在MySQL中,索引是一个排序的列表,在这个索引中存在这个索引的值和这个索引所在行的物理地址,使用索引可以加快查询速度是因为,使用索引后可以不用扫描全表来定位某行的位置,而是通过索引列表直接跳转到该行的物理地址访问相关的数据。MySQL中索引的语法建表的时候添加索引:CREATE TABLE table(ID INT NOT NULL,username VARCHAR(16) NOT ...

weixin_35848310的博客 217
上一篇: Mysql的体系结构
下一篇: MySQL优化
pingping_wang
博客等级 码龄8年 17粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值