前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >对索引的使用

对索引的使用

原创
作者头像
Get
发布于 2024-03-12 13:27:21
发布于 2024-03-12 13:27:21
2690
举报
代码语言:java
AI代码解释
复制

什么情况下使用索引?
1、索引应该建在where 子句和 order by 经常查询的列上。
2、对于两表连接的字段,应该建立索引。
3、不应该在小表上建设索引(例如表中只有三四个字段)。
什么情况下索引失效?
1、违法最左前缀法则,索引失效
2、范围查询右边(后面)的列,不能使用索引 ,则范围查询字段后面的字段索引失效(><3、字符串不加单引号,造成索引失效
4、尽量使用覆盖索引(只访问索引的查询(索引列完全包含查询列)),避免select *
5、用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。
6、索引列上进行运算操作,索引将失效,运算包括(+-*/!%<>),导致索引失效。
7、不等于(!=)比较特殊 除主键索引或索引是整数类型外的其它索引都失效。
8、索引列上不要使用函数,oracle必须使用函数索引。
9、以%开头的Like模糊查询(%xxx),索引失效。如果非要用请使用全文索引或('aaa%')
10、is  NULL , is NOT NULL  有时索引失效。
11、in 走索引, not in 索引失效。
12、尽量使用复合索引,而少使用单列索引
select xxx,xxx 若字段为索引则使用索引,若包含非索引字段则都不走索引
如何验证MySQL索引是否满足需求?
使用explain查看SQL是如何执行查询语句的,从而分析你的索引是否满足需求。
explain语法:explain select * from table where 1=1;
总结:
1、能用唯一索引,一定用唯一索引。
2、可以给字段加非空约束就尽量加上非空约束。
3、联合索引的顺序不同,影响索引的选择,尽量将值少的放在前面。
4、千万不要给大字段加索引。
检查语句是否走索引, 使用explain 关键执行一下 key是否有值, 有值就说明走了索引,null就表示索引失效
使用索引注意事项:
1、索引不会包含有null值的列
   只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。
   所以我们在数据库设计时不要让字段的默认值为null2、使用短索引
   对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,
   那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
3、索引列排序
   MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。
   因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
4、like语句操作
   一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。
   like '%aaa%' 不会使用索引,而 like 'aaa%' 可以使用索引。
5.、不要在列上进行运算
    复制代码 代码如下:
    select * from users where YEAR(adddate)<2007;
    将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:
    复制代码 代码如下:
    select * from users where adddate<2007-01-01';
6.不使用NOT IN<>操作

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
性能优化-索引使用八大注意事项
设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率。设计MySql索引的时候有一下几点注意:
cwl_java
2020/02/13
5080
sql必会基础3
对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情 况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。
Java架构师历程
2018/09/26
9610
MySQL索引类型一览 让MySQL高效运行起来
索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。 在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin。 在查找username="admin"的记录 SELECT *
wangxl
2018/03/07
9960
Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的,代码方面,整合了druid数据源也开启了sql监控等,修改和规范了变量的命名方式,建表时的命名方式也做了修改,不过做的这些还不够,优化这件事真是一个长期和自觉的过程,mapper文件中的sql语句,依然不是十分的符合规范,有继续优化的必要,数据库中表的结构也需要继续优化。 前一篇文章主要讲了慢sql的整理,以及explain关键字在优化查询语句中的
程序员十三
2018/03/15
9760
Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化
mysql之索引的工作机制
当db的量达到一定数量级之后,每次进行全表扫描效率就会很低,因此一个常见的方案是建立一些必要的索引作为优化手段,那么问题就来了:
一灰灰blog
2018/03/26
1.5K0
mysql之索引的工作机制
MySQL最左匹配原则,道儿上兄弟都得知道的原则
  通常我们在建立联合索引的时候,相信建立过索引的同学们会发现,无论是Oracle还是 MySQL 都会让我们选择索引的顺序,比如我们想在a,b,c三个字段上建立一个联合索引,我们可以选择自己想要的优先级,(a、b、c),或是 (b、a、c) 或者是(c、a、b) 等顺序。
陈哈哈
2021/10/13
5.9K0
3分钟速读原著《高性能MySQL》(二)
第五章 创建高性能的索引 1.索引类型 1.1 普通索引 NORMAL: 是最基本的索引,它没有任何限制。 1.2 唯一索引 SPATIAL: 与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。 1.3 主键索引: 是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引: 1.4 组合索引: 指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集
cwl_java
2019/10/26
5710
mysql常见的面试回答
innodb这种原生的数据文件就是索引文件的组织结构,这种默认的主键索引为聚簇索引。就是因为这个原因,innodb表要求必须有主键的,但是myisam表不要求必须有主键。另外一个是,innodb存储引擎下,如果对某个非主键的字段创建个索引,那么最后那个叶子节点的值就是主键的值,因为可以用主键的值到聚簇索引里根据主键再次查找到数据。
技术从心
2020/03/10
4120
mysql常见的面试回答
MySQL索引优化实战
众所周知,索引类似于字典的目录,可以提高查询的效率。 索引从物理上可以分为:聚集索引,非聚集索引 从逻辑上可以分为:普通索引,唯一索引,主键索引,联合索引,全文索引
Java识堂
2019/05/21
1.2K0
mysql之视图、索引
视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的。
全栈程序员站长
2022/09/16
1.1K0
MySQL索引详解
一个数据页满了,按照B+Tree算法,新增加一个数据页,叫做页分裂,会导致性能下降。空间利用率降低大概50%。当相邻的两个数据页利用率很低的时候会做数据页合并,合并的过程是分裂过程的逆过程。
Michel_Rolle
2023/10/29
3K1
mysql索引及优化
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
allsmallpig
2021/02/25
8450
史上最全存储引擎、索引使用及SQL优化的实践
整个MySQL Server由以下组成 : Connection Pool :连接池组件 Management Services & Utilities :管理服务和工具组件 SQL Interface :SQL接口组件 Parser :查询分析器组件 Optimizer :优化器组件 Caches & Buffers :缓冲池组件 Pluggable Storage Engines :存储引擎 File System :文件系统 1)连接层 最上层是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 2)服务层 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等。在该层,服务器会解析查询并创建相应的内部解析树,并对其完成相应的优化如确定表的查询的顺序,是否利用索引等,最后生成相应的执行操作。如果是select语句,服务器还会查询内部的缓存,如果缓存空间足够大,这样在解决大量读操作的环境中能够很好的提升系统的性能。 3)引擎层 存储引擎层,存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。 4)存储层 数据存储层,主要是将数据存储在文件系统之上,并完成与存储引擎的交互。
海仔
2019/08/05
1.4K0
史上最全存储引擎、索引使用及SQL优化的实践
曾经,我以为我很懂MySQL索引
  在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
陈哈哈
2020/09/11
8260
曾经,我以为我很懂MySQL索引
相关推荐
性能优化-索引使用八大注意事项
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档