MySQL——索引失效的10种情况

news2024/10/6 2:00:31

MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询速度,因此索引对查询的速度有着至关重要的影响。

  • 使用索引可以快速定位表中的某条记录,从而提高数据库查询的速度,提高数据库的性能
  • 如果查询时没有使用索引,查询语句就会扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢。

大多数情况下都(默认)采用B+树来构建索引。只是空间列类型的索引使用R-树,并且MEMORY表还支持hash索引

其实,用不用索引,最终都是优化器说了算。优化器时基于什么的优化器?基于cost开销(CostBaseOptimizer),它不是基于规则(Rule-BasedOptimizer),也不是基于语义,怎么样开销小就怎么来。另外,SQL语句是否使用索引,跟数据库版本、数据量、数据选择度都有关系。

1、要尽量满足全值匹配
2、最佳左前缀法则

MySQL可以为多个字段创建索引,一个索引可以包含16个字段。对于多列索引,**过滤条件要使用索引必须按照索引建立时的顺序,依次满足,一旦跳过某个字段,索引后面的字段都无法被使用。**如果查询条件中没有使用这些字段中的第1个字段时,多列(或联合)索引不会被使用。

索引文件具有B-Tree的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引【Alibaba《开发手册》】

3、主键插入顺序尽量自增
4、计算、函数、类型转换(自动或手动)
  • 计算

    EXPLAIN SELECT * FROM `s1` WHERE id = id + 1
    

    在这里插入图片描述

  • 函数

    EXPLAIN SELECT min(key2) FROM `s1` where key2 = 10036
    
  • 类型转换

    此时key1是varchar类型

    EXPLAIN SELECT * FROM `s1` where key1 = 1
    

    在这里插入图片描述

5、范围条件右边的列表

应用开发中范围查询,例如:金额查询,日期查询往往都是范围查询。应该查询条件放置where语句最后。(创建联合索引中,务必把范围涉及到的字段写在最后)

EXPLAIN SELECT * FROM `s1` WHERE key1 = 'vLuQVg' and key3 = 'RQFCYj' and key2 >10036

在这里插入图片描述

联合索引失效,注意顺序不是SQL,而是设计索引的顺序

6、不等于(!=或者<>)
EXPLAIN SELECT * FROM `s1` WHERE key1 != 'vLuQVg'

在这里插入图片描述

7、is not null
EXPLAIN SELECT * FROM `s1` WHERE id is not null

在这里插入图片描述

8、like以通配符%开头
EXPLAIN SELECT * FROM `s1` WHERE key1 like '%v'

在这里插入图片描述


页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。【Alibaba 《Java开发手册》】

9、OR前后存在非索引的列

在WHERE子句中,如果在ON前的条件列进行了索引,而在OR后的条件列没有进行索引,那么索引也会失效。也就是说,OR前后两个条件中的列都是索引时,查询中才使用索引

因为OR的含义就是两个只要满足一个即可,因此只有一个条件列进行了索引时没有意义的,只要有条件的列没有进行索引,就会进行全表扫描,因此索引的条件列也会失效

EXPLAIN SELECT * FROM `s1` where key1 = 'vLuQVg' OR common_field ='ExCtlZpyzZ'

在这里插入图片描述

10、数据库和表的字符统一
建议
  • 对于单列索引,尽量选择针对当前query过滤性更好的索引。
  • 在选择组合索引的时候,当前query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。
  • 在选择组合索引的时候,尽量选择能够包含当前query中的where子句中更多字段的索引。
  • 在选择组合索引的时候,如果某个字段可能出现范围查询时,尽量把这个字段放在索引次序的最后面。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

功能强大且专业的PDF转换软件PDF Shaper Professional 14.2

PDF Shaper Professional是一款适用于Windows的程序&#xff0c;可让您在计算机上处理PDF文件。 要开始使用PDF Shaper Professional&#xff0c;您需要在Windows计算机上下载并安装该程序。您还应该有合适的驱动程序和编解码器来处理计算机上的文本和图形。 安装程序后&#…

常用运维工具之 WGCLOUD(国产软件)介绍

WGCLOUD是一款免费开源的运维监控软件&#xff0c;轻量高效&#xff0c;部署方便&#xff0c;上手简单&#xff0c;界面简单流畅 WGCLOUD是国产运维软件&#xff0c;可以适配大部分的信创环境&#xff0c;比如麒麟、统信等操作系统 WGCLOUD具体支持监控的操作系统如下&#x…

【全开源】小区入户安检系统(FastAdmin + Uni-APP)

守护家的每一道防线 一款基于FastAdmin Uni-APP开发的小区入户安检系统(前端可发布为小程序、H5、App)。可针对不同行业自定义安检项目&#xff0c;线下安检&#xff0c;线上留存&#xff08;安检拍照/录像&#xff09;&#xff0c;提高安检人员安检效率。 一、引言&#xff…

php反序列化入门

一&#xff0c;php面向对象。 1.面向对象&#xff1a; 以“对象”伪中心的编程思想&#xff0c;把要解决的问题分解成对象&#xff0c;简单理解为套用模版&#xff0c;注重结果。 2.面向过程&#xff1a; 以“整体事件”为中心的编程思想&#xff0c;把解决问题的步骤分析出…

美洽工作台3.0,全新发布!

美洽工作台3.0&#xff0c;全新发布 想要效率翻倍&#xff0c;就要一步到位&#xff01; 工作台 3.0&#xff0c;为效率而生 1. 更丰富的外观选择&#xff0c;让界面焕然一新&#xff0c;新增导航主题色选择&#xff0c;深色 Dark、浅色 Light 随意切换 2. 自定义你的专属导…

基于STM32的位置速度环PID控制伺服电机转动位置及程序说明

PID控制原理 PID控制原理是一种广泛应用于工业自动化和其他领域的控制算法。PID控制器的名字来源于其三个主要组成部分&#xff1a;比例&#xff08;Proportional&#xff09;、积分&#xff08;Integral&#xff09;和微分&#xff08;Derivative&#xff09;。PID控制器实现…

C++数组实现推箱子游戏

前言 我是三天打鱼两天晒网的闲人,今天跟着课程视频学习c的数组的运用. 准备好游戏用到的图片资源 代码逻辑实现 #include<iostream> #include<graphics.h> #include<string> #include<conio.h>using namespace std;//设置画布大小 #define SCREEN…

【人工智能】第六部分:ChatGPT的进一步发展和研究方向

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

C++ | Leetcode C++题解之第120题三角形最小路径和

题目&#xff1a; 题解&#xff1a; class Solution { public:int minimumTotal(vector<vector<int>>& triangle) {int n triangle.size();vector<int> f(n);f[0] triangle[0][0];for (int i 1; i < n; i) {f[i] f[i - 1] triangle[i][i];for (…

Jmeter的几种参数化方式

1.为什么要做参数化&#xff1f; 在用jmeter脚本进行压测的时候&#xff0c;为了更真实的模拟起到更好的效果&#xff0c;我们需要让参数动态变化起来&#xff0c;也就是参数化。通过参数化我们也可以更好、更灵活的维护我们的测试脚本。 2.参数化的方式 能够实现参数化的方式有…

6月4(信息差)

&#x1f30d;AI预测极端天气提速5000倍&#xff01;微软发布Aurora&#xff0c;借AI之眼预测全球风暴 &#x1f384;理解老司机&#xff0c;超越老司机&#xff01;LeapAD&#xff1a;具身智能加持下的双过程自驾系统&#xff08;上海AI Lab等&#xff09; 论文题目&#xf…

对boot项目拆分成cloud项目的笔记

引言&#xff1a;这里我用的是新版本的技术栈 spring-boot-starter-parent >3.2.5 mybatis-spring-boot-starter >3.0.3 mybatis-plus-boot-starter >3.5.5 spring-cloud-dependencies …

JMeter Plugins Manager---插件安装

参考文章&#xff1a;https://blog.51cto.com/u_14126/6291032 需求&#xff1a; 安装【jpgc - Standard Set】插件 常用插件&#xff1a; 点击下载–报错如下&#xff1a; Failed to apply changes:Cannotapplychanges:Haveno write accessforJMeterdirectories,notpossib…

iTerm2 携手 OpenAI,带来命令行的自然语言革新

在技术不断进步的今天&#xff0c;命令行工具的智能化已成为提升效率的关键。iTerm2&#xff0c;macOS 系统上广受欢迎的开源终端工具&#xff0c;通过最新版本 v3.5 的发布&#xff0c;实现了与 OpenAI 的集成&#xff0c;引领了这一变革。 iTerm2 简介 iTerm2 是一款功能强…

宝塔部署vue+springboot过程(图文)

宝塔是傻瓜式操作部署&#xff0c;xshell是用linux命令部署 &#xffe5;过程&#xffe5; 整个流程具体服务器开端口在阿里云服务器打开3306端口&#xff08;有用到的端口都要打开&#xff09;宝塔&#xff1a;添加数据库获取数据库名、用户名、密码&#xff1b;点击“工具”…

容器化部署Pig微服务快速开发框架

系统说明 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC 企业快速开发平台&#xff0c; 同时支持微服务架构和单体架构 提供对 Spring Authorization Server 生产级实践&#xff0c;支持多种安全授权模式 提供对常见容器化方案支持 Kubernetes、Rancher2 、Kubesphere、E…

iotdb时序库在火电设备锅炉场景下的实践【原创文字,IoTDB社区可进行使用与传播】

一.概述 1.1 说明 本文章主要介绍iotdb数据库在电站锅炉工业场景下&#xff0c;对辅助智能分析与预警的使用介绍。 【原创文字&#xff0c;IoTDB社区可进行使用与传播】 1.2 项目背景 随着人工智能算法在电力领域的发展&#xff0c;以及燃煤锅炉设备精细化调整需求的增加&…

君方船舶智能设计平台技术架构

1.整体架构 2.基础能力 2.1 测试工具 2.1.1 测试框架 2.1.2 调试工具 2.2 UI交互 2.2.1 通用属性面板 2.2.2 对象通用拷贝框架 2.2.3 命令交互操作框架 2.2.4 夹点编辑框架 2.2.5 对象捕捉 2.3 模型管理 2.3.1 对象数据管理 2.3.2 对象空间关系管理 2.3.3 对象依赖关系管理…

发现情绪背后的真实心理需求,选择适合你的情绪调节方式

一、教程描述 心态对人的生活质量以及身体健康等多方面&#xff0c;都会产生非常重要的影响&#xff0c;受到不良情绪的影响&#xff0c;人的心态也会发生一定的变化。对于处于不良情绪状态的人来讲&#xff0c;应该重视学会调整自己的情绪。在心理学上&#xff0c;人的每种情…

AR和AP重分类(Regroup)[FAGLF101/OBBU/OBBV]

一、为什么AR和AP科目需要重分类 1.1 执行操作的前提(重要) 存在AR的当月总余额在贷方&#xff08;客户贷项凭证、预收账款等&#xff09;或AP的当月总余额在借方&#xff08;供应商贷项凭证、预收账款等&#xff09;&#xff0c;这种情况下无法真实的反映出资产和负债情况&…