MySQL--索引(3)

1.索引创建注意点

选择合适的字段

1.不为 NULL 的字段

        索引字段的数据应该尽量不为 NULL,因为对于数据为 NULL 的字段,数据库较难优化。如果字段频繁被查询,但又避免不了为 NULL,建议使用 0,1,true,false 这样语义较为清晰的短值或短字符作为替代。

2.被频繁查询的字段

        我们创建索引的字段应该是查询操作非常频繁的字段。

3.被作为条件查询的字段

        被作为 WHERE 条件查询的字段,应该被考虑建立索引。

4.被经常频繁用于连接的字段

        经常用于连接的字段可能是一些外键列,对于外键列并不一定要建立外键,只是说该列涉及到表与表的关系。对于频繁被连接查询的字段,可以考虑建立索引,提高多表连接查询的效率。

不合适创建索引的字段

1.被频繁更新的字段应该慎重建立索引

        虽然索引能带来查询上的效率,但是维护索引的成本也是不小的。 如果一个字段不被经常查询,反而被经常修改,那么就更不应该在这种字段上建立索引了。

2.不被经常查询的字段没有必要建立索引
3.尽可能的考虑建立联合索引而不是单列索引

        因为索引是需要占用磁盘空间的,可以简单理解为每个索引都对应着一颗 B+树。如果一个表的字段过多,索引过多,那么当这个表的数据达到一个体量后,索引占用的空间也是很多的,且修改索引时,耗费的时间也是较多的。如果是联合索引,多个字段在一个索引上,那么将会节约很大磁盘空间,且修改数据的操作效率也会提升。

4.注意避免冗余索引

        冗余索引指的是索引的功能相同,能够命中 就肯定能命中 ,那么 就是冗余索引如(name,city )和(name )这两个索引就是冗余索引,能够命中后者的查询肯定是能够命中前者的 在大多数情况下,都应该尽量扩展已有的索引而不是创建新索引。

5.考虑在字符串类型的字段上使用前缀索引代替普通索引

        前缀索引仅限于字符串类型,较普通索引会占用更小的空间,所以可以考虑使用前缀索引带替普通索引。

使用索引一定能提高查询性能吗?

        大多数情况下,索引查询都是比全表扫描要快的。但是如果数据库的数据量不大,那么使用索引也不一定能够带来很大提升。

2.索引失效的因素

前四个为重点

  1. 查询条件不是最左前缀
    如果你有一个复合索引(联合索引),MySQL可以使用该索引的最左前缀来优化查询。如果查询条件没有从索引的最左边列开始,那么MySQL可能不会使用该索引。

  2. 查询条件中的函数操作
    如果在查询条件中对索引列使用了函数或表达式(如WHERE YEAR(date_column) = 2023),那么MySQL将无法使用索引,因为索引是基于列的原始值建立的,而不是基于函数的结果。

  3. 隐式类型转换
    如果查询条件中的数据类型与索引列的数据类型不匹配,并且MySQL必须进行隐式类型转换才能进行比较,那么索引可能不会被使用。例如,如果索引列是整型(INT),但查询条件中使用了字符串('123'),则可能发生隐式类型转换。

  4. LIKE语句的开头是通配符
    当使用LIKE语句进行模糊匹配,并且匹配模式的开头是通配符(如%abc),MySQL将无法使用索引来加速查询,因为索引是基于列的固定前缀建立的。但是,如果通配符不在开头(如abc%),则索引仍然可以被使用。

  5. OR条件
    在某些情况下,如果查询条件包含OR,并且OR连接的两个条件分别针对不同的索引列,MySQL可能会选择不使用索引而执行全表扫描。这取决于查询的具体情况和MySQL的优化器决策。

  6. 索引统计信息过时
    如果MySQL的索引统计信息(如表的行数、索引的分布等)过时,那么优化器可能会基于不准确的信息来做出不使用索引的决策。在这种情况下,可以通过运行ANALYZE TABLE命令来更新统计信息。

  7. 索引选择性低
    如果索引列中的大多数值都是相同的(即索引的选择性很低),那么MySQL可能会认为使用索引的代价太高,从而选择全表扫描。

  8. 查询优化器的决策
    最终,是否使用索引取决于MySQL查询优化器的决策。在某些情况下,即使理论上可以使用索引,优化器也可能因为各种内部因素(如内存限制、查询缓存的考虑等)而选择不使用索引。

最后:了解和避免这些导致索引失效的因素,可以帮助你优化MySQL查询的性能。在实际应用中,可以通过EXPLAIN命令来查看MySQL如何执行你的查询,并检查是否使用了索引。(要使用 EXPLAIN 命令,你只需在 SQL 语句前加上 EXPLAIN 关键字。)

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

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

相关文章

Vue--解决error:0308010C:digital envelope routines::unsupported

原文网址:Vue--解决error:0308010C:digital envelope routines::unsupported_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决node.js在运行Vue项目时的报错:error:0308010C:digital envelope routines::unsupported。 问题描述 使用node.js运行Vu…

力扣3226 使两个整数相等的位更改次数

写的代码&#xff1a; class Solution { public:string cc(int num){string res"";while(num>0){int rnum % 2;resstatic_cast<char>(48r)res;num/2;}return res;}int minChanges(int n, int k) {int res0;string n2cc(n);string k2cc(k);int n_sizen2.siz…

机器人开源调度系统OpenTCS-6最新版本地源码运行

OpenTCS 项目使用 Gradle 而不是 Maven&#xff0c;那么需要使用 Gradle 来导入和构建项目。在 IntelliJ IDEA 中导入和运行使用 Gradle 的项目&#xff0c;可以按照以下步骤进行操作&#xff1a; 克隆 OpenTCS 源码 首先&#xff0c;克隆 OpenTCS 的源码到本地。您可以使用以…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十八章 驱动模块编译进内核

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

ASP.NET中的六大对象有哪些?以及各自的功能以及使用方式

在ASP.NET Web Forms中&#xff0c;并没有严格意义上的“六大对象”&#xff0c;但通常我们指的是与HTTP请求和响应处理紧密相关的几个内置对象。以下是这些对象及其功能、使用方式以及简单的实现源码示例&#xff1a; Response对象 功能&#xff1a;用于向客户端发送HTTP响应…

UWB实操:使用 litepoint 测线损 pathloss

使用 litepoint 测线损 pathloss 把信号线接到 litepoint 的RF1 和RF2。 注意: RF1 支持 VSG(TX) 和VSA(RX)RF2 只支持 VSG(TX)同一时间只能一个 VSG(TX)双击 LED STATUS,改变RF1和RF2的模式。 RF1:VSA(RX) RF2:VSG(TX) Technology选择GPRF

cf场+线性dp

Problem - B - Codeforces 思路&#xff1a; 这其实是一道数学题&#xff08;最开始一直在枚举&#xff0c;服啦&#xff09; 我们的目的是求最大利润 当a>b是时直接令k0,利润n*a即可 当a<b时存在两种情况&#xff1a; 1.b-a>n即所有b-i1的情况都>a&#xff0…

掌握Python:三本不可错过的经典书籍

强烈推荐Python初学者用这三本书入门! Python3剑客 一、《Python编程从入门到实践》 这本书适合零基础的Python读者&#xff0c;旨在帮助他们快速入门Python编程&#xff0c;并达到初级开发者的水平。书中深入浅出地介绍了Python的基础概念&#xff0c;如变量、循环、函数等…

【BUG】已解决:ModuleNotFoundError: No module named ‘tensorboard‘

ModuleNotFoundError: No module named ‘tensorboard‘ 目录 ModuleNotFoundError: No module named ‘tensorboard‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

爬虫学习4:爬取王者荣耀技能信息

爬虫&#xff1a;爬取王者荣耀技能信息&#xff08;代码和代码流程&#xff09; 代码 # 王者荣耀英雄信息获取 import time from selenium import webdriver from selenium.webdriver.common.by import By if __name__ __main__:fp open("./honorKing.txt", "…

主机加固,如何重塑产线工控安全的防勒索病毒生态

在数字化转型的浪潮中&#xff0c;企业信息安全面临着前所未有的挑战&#xff0c;尤其是针对主机层面的攻击手段愈发狡猾。MCK主机加固系统&#xff0c;作为新一代主机安全防护方案&#xff0c;凭借其独步业界的内核级签名校验技术和深度学习驱动的业务场景白名单策略&#xff…

【C++】马蹄集02 自守数II

输入正整数N&#xff0c;检查该数是否为自守数输出YES或者NO。当且仅当一个数的平方以与该数相同的数字结尾时该数称为自守数。 格式 输入格式&#xff1a;输入正整数N 输出格式&#xff1a;输出YES或者NO 样例1 输入&#xff1a;76 输出&#xff1a;YES 代码 利用substr…

Cookie Session Token

Cookie (小型文本文件) 存储位置&#xff1a; 客户端&#xff08;浏览器&#xff09;中的 Cookie。 工作原理&#xff1a; 登录&#xff1a;用户提交登录表单&#xff0c;服务器验证凭证&#xff08;如用户名和密码&#xff09;。 设置 Cookie&#xff1a;服务器在响应中设置…

Win10环境将Docker部署到非系统盘

Win10环境将Docker部署到非系统盘 目录 Win10环境将Docker部署到非系统盘 一、Docker官网客户端Docker Hub下载 二、windows环境的安装 三、正确的迁移步骤 3.1、确保你的系统分区至少3G的剩余空间&#xff1b; 3.2、默认方式安装Docker hub&#xff1b; 3.3、打开Dock…

2024年钉钉杯大数据竞赛的赛题

钉钉杯的含金量是相当大的&#xff0c;这个证书在多个方面都具有较高的价值。以下是对其含金量和证书有用性的详细分析&#xff1a; 含金量分析 国家级竞赛地位&#xff1a; 钉钉杯大数据挑战赛是由阿里巴巴旗下钉钉举办的全国大数据比赛&#xff0c;已被众多高校认定为国家C…

切换IP地址如何实现?

随着互联网的发展和普及&#xff0c;我们日常生活中的各种操作和通讯越来越依赖互联网。互联网上存在的一些问题和限制使得更换IP地址成为必要的步骤。下面我们将探讨在互联网业务中&#xff0c;需要更换IP地址的原因与方法。 一、IP轮换的应用 解决访问限制&#xff1a;解决访…

Java语言程序设计——篇五(1)

数组 概述数组定义实例展示实战演练 二维数组定义数组元素的使用数组初始化器实战演练&#xff1a;矩阵计算 &#x1f4ab;不规则二维数组实战演练&#xff1a;杨辉三角形 概述 ⚡️数组是相同数据类型的元素集合。各元素是有先后顺序的&#xff0c;它们在内存中按照这个先后顺…

分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测

分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测&#xff0…

[排序]hoare快速排序

今天我们继续来讲排序部分&#xff0c;顾名思义&#xff0c;快速排序是一种特别高效的排序方法&#xff0c;在C语言中qsort函数&#xff0c;底层便是用快排所实现的&#xff0c;快排适用于各个项目中&#xff0c;特别的实用&#xff0c;下面我们就由浅入深的全面刨析快速排序。…

visio保存一部分图/emf图片打开很模糊/emf插入到word或ppt中很模糊

本文主要解决三个问题 visio保存一部分图 需求描述&#xff1a;在一个visio文件中画了很多个图&#xff0c;但我只想把其中一部分保存成某种图片格式&#xff0c;比如jpg emf png之类的&#xff0c;以便做后续的处理。 方法&#xff1a;超级容易。 选中希望保存的这部分图&…