MySql-索引失效的情况

1.模糊查询时%在开头

当使用模糊查询(如使用 LIKE '%keyword%')时,如果通配符 % 出现在搜索关键字的开头,那么索引将无法被有效利用,从而导致索引失效。

当通配符出现在搜索关键字的开头时,索引失效的主要原因是因为索引是按照值的顺序进行存储和排序的,而通配符 % 出现在开头时,表示需要匹配任意长度的字符串,这样就无法利用索引的有序性进行高效的检索。

举个例子,假设有一个列 col1 上建立了索引,并进行了模糊查询:WHERE col1 LIKE '%keyword'。在这个查询中,由于 % 出现在关键字的开头,数据库无法利用索引的有序性来快速定位匹配的记录,而是需要逐条扫描所有记录,这导致了索引失效和性能下降。

2.对列进行运算/对列使用函数

当对列进行运算(如加减乘除、函数操作)后,如果这个运算结果参与到查询条件中,有时会导致数据库无法有效地使用索引,从而影响查询性能。

举例来说,如果有一个列 col1 上建立了索引,并且在查询中使用了 col1 * 2 = 10 这样的条件,这种情况下数据库可能无法直接利用 col1 的索引来加速查询,因为需要先对 col1 进行运算,然后才能进行匹配。这就导致了索引失效,从而可能降低查询性能。

3.列使用了类型转换

当在查询条件中对列进行类型转换时,数据库系统可能无法有效地利用索引来加速查询,从而导致性能下降。

4.where判断条件有or

or只需表达式的一个条件满足就会返回真,那么实际上会进行全表查询

5.where条件为is not null或者!=之类的范围查询

在查询过程中回表次数过多,系统会认为使用索引的时间成本高于全表扫表,而直接进行全表扫描,不走索引。(一般界限是全表范围的20%)比如当where判断条件是is not null或者!=时,回表数量可能会很大,也可能产生索引失效。

6.非最左匹配

最左匹配是指在使用复合索引(Composite Index)时,查询条件中的列必须按照索引中列的顺序从最左边开始依次匹配,才能充分利用该索引进行高效的数据检索。

举个例子,假设有一个复合索引包含 (col1, col2, col3),当查询条件中只包含 col2 和 col3 而不包含 col1 时,这个索引就无法发挥作用,从而导致索引失效。

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

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

相关文章

如何用golang写一个自己的后端框架

如果你想要不使用任何现有的后端框架,完全从头开始创建一个后端框架,你需要实现Web服务器的基本组件,比如路由器、请求处理、中间件支持等。以下是一个简单的指南,用于创建一个基本的、不使用任何外部框架的Go后端框架。 步骤 1: 设置工作环境 确保你已经安装了Go语言环境…

vue3 实现一个简单的输入框

需求背景 需要一个输入框,可以输入文字,添加表情,一开始用了富文本编辑器,有点大材小用,所以自己封装一个输入框组件。支持输入文字,选择表情/插入表情,支持组合键换行,使用enter 进…

模块化学习

CommonJS 全局变量污染依赖混乱 模块化的标准: CommonJS CMJ 社区标准 node环境ES Module ESM 官方标准 CMJ规范: 所有的 js 文件都是一个模块 运行的模块 入口模块所有的模块中的全局变量、函数,均不会产生污染当一个模块需要提供一些东西给…

Python Web详细教程

Python Web开发的详细教程可以分为以下几个步骤: 1. 环境搭建 安装Python:确保你的系统上安装了Python。你可以从Python官网下载并安装最新版本的Python。 安装虚拟环境:为了隔离项目依赖,建议使用虚拟环境。你可以使用venv模块创…

DPU:未来计算的三大支柱之一

随着计算领域的不断发展,数据处理单元(DPU)的出现正在重塑数据中心和计算架构的未来。在本文中,我们深入探讨了DPU在该领域的重要性和作用,并将其与传统的中央处理器(CPU)和图形处理单元&#x…

2024年小程序云开发CMS内容管理无法使用,无法同步内容模型到云开发数据库的解决方案,回退老版本CMS内容管理的最新方法

一,问题描述 最近越来越多的同学找石头哥,说cms用不了,其实是小程序官方最近又搞大动作了,偷偷的升级的云开发cms(内容管理)以下都称cms,不升级不要紧,这一升级,就导致我…

亚马逊云科技实时 AI 编程助手 Amazon CodeWhisperer,开发快人一步

​ 亚马逊云科技:https://mic.anruicloud.com/url/1024 ​ Amazon CodeWhisperer 是一款 AI 编码配套应用程序,可在 IDE 中生成 整行代码和完整的函数代码建议,以帮助您更快地完成更多工作。在本系列 文章中,我们将为您详细介绍 A…

学习阶段单片机买esp32还是stm32?

学习阶段单片机买esp32还是stm32? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「stm32的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#xf…

5G时代对于工业化场景应用有什么改善

5G 不仅仅是 4G 的技术升级,而是将平板电脑和智能手机的技术升级。除了更好的高清视频流和其他高带宽应用,消费者不会注意到很多性能差异。然而,在工业领域,5G 代表着巨大的飞跃。 在工厂和厂房内, 设备的Wi-Fi 网络经…

el-table实现转置表格

vue版本&#xff1a;vue2.6.10 elementui版本&#xff1a;2.15.14 实现效果&#xff1a;el-table实现行列互换 代码&#xff1a; <template><div class"app-container"><span>原始数据</span><el-table:data"datas"border>…

JAVA的方法

学习过C语言&#xff0c;我们可以知道&#xff0c;C语言是由各种各样的函数构成的&#xff0c;程序的入口是主函数&#xff0c;程序结束也是从主函数的最后一行代码结束的&#xff08;默认主函数中间没有return&#xff09;。JAVA是在C上编写的&#xff0c;而C是在C语言之上编写…

Groovy(第四节) Groovy 之循环

目录 循环 深入方法 Groovy 中的范围 设置范围 默认参数值

orm工具saveOrUpdate()操作设计思路

背景 当我们使用数据库向表中插入数据的时候&#xff0c;经常遇到这样的情况&#xff1a; 判断数据是否存在&#xff1b;如果不存在&#xff0c;则插入&#xff1b;如果存在&#xff0c;则更新。 如何设计saveOrUpdate&#xff08;&#xff09; 当我们手写一个orm工具库的时…

自动化信息抽取:提升物资仓库管理效率的实践案例

一、引言 在当今快节奏的供应链管理中&#xff0c;物资仓库的信息抽取和处理是确保物流效率的关键环节。我曾参与的一个项目&#xff0c;正是针对这一需求而设计。该项目的核心目标是优化收货与入库流程&#xff0c;通过先进的信息抽取技术&#xff0c;我们能够自动接收并处理来…

MYSQL--JDBC*

一.介绍: 1.JDBC是一种用于执行SQL于语句的JAVA API,JDBC是一种使用JAVA访问数据库的执行规范标准,能够为不同的数据库提供统一的访问!由一组使用JAVA语言编写的接口以及类组成的 2.JDBC核心的类以及相关的接口主要有: DriverManager 注册驱动 Connection 使用…

代码随想录刷题笔记-Day25

1. 分割回文串 131. 分割回文串https://leetcode.cn/problems/palindrome-partitioning/ 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xf…

购房合同的注意事项是什么呢?房子备案需要多久?

房屋登记需要多长时间&#xff1f; 购房合同要注意什么&#xff1f; 2019/02/20 10:02:07 来源&#xff1a;方天下观点&#xff08;6993&#xff09; [摘要] 购买房屋后&#xff0c;需要向房管部门办理房屋登记。 这样可以证明房子是在业主名下的&#xff0c;所以需要了解房屋…

c++学习记录 deque容器—排序

算法&#xff1a; sort(iterator beg,iterator end); //对beg和end区间内元素进行排序 #include<iostream> using namespace std; #include<deque> #include<algorithm>//标准算法头文件void printDeque(const deque<int>& d) {for …

tar压缩分包,解决git上传对文件的大小限制

分包 比如压缩包abc.tar.gz大于github要求的30M, 可以通过分包命令&#xff1a; tar czf - abc.tar.gz | split -b 20m - abc.tar.gz 将abc.tar.gz分成不大于20M的多个包&#xff0c;再提交到github. 合并包 使用时通过命令将包合并回来&#xff1a; cat abc.tar.gz* | tar …

【知识分享】Echarts雷达图组件封装

封装 Echarts 的雷达图&#xff08;radar chart&#xff09;组件也可以让你在 Vue 项目中更方便地使用雷达图。以下是封装 Echarts 雷达图组件的思路和示例代码&#xff1a; &#xff08;1&#xff09;继续沿用之前安装的 Echarts 和 Vue-Echarts 插件。 &#xff08;2&#…