首页 > 数据库 >SQL查询索引失效之谜

SQL查询索引失效之谜

时间:2022-11-01 12:36:32浏览次数:41  
标签:查询 索引 user SQL 失效 WHERE SELECT 之谜


1、使用!= 或者 <> 

SELECT * FROM user WHERE name != 'andrew';

2、字段类型不同

3、索引列使用函数

如:

SELECT * FROM user WHERE DATE(create_at) = '2020-09-03';

如果使用函数在索引列,这是不走索引的。

4、索引列使用运算符

SELECT * FROM user WHERE age - 1 = 20;

如果你对列进行了(+,-,*,/,!), 那么都将不会走索引。

5、使用OR关键字

SELECT * FROM user WHERE name = 'andrew' OR age= 28;

OR导致索引是在特定情况下的,并不是所有的OR都是使索引失效,如果OR连接的是同一个字段,那么索引不会失效,反之索引失效。

6、Like 左匹配

SELECT * FROM user WHERE name LIKE '%里程';

当 % 放在匹配字段前是不走索引的,放在后面才会走索引。

7、NOT IN、NOT EXISTS导致索引失效

8、使用 *(星)查询

SELECT * FROM user

9、不满足最左匹配原则

 该索引字段的顺序是:name、age、code

SELECT * FROM USER WHERE code=1 AND age=12

如果在使用组合索引时,没注意最左前缀原则,导致索引失效。

为了测试方便查询时使用的 *(星),在《阿里巴巴开发手册》中有明确规定,查询sql中禁止使用select * 。使用 *(星)查询,走的是全表扫描,没有用到任何索引,查询效率是非常低的。

标签:查询,索引,user,SQL,失效,WHERE,SELECT,之谜
From: https://blog.51cto.com/u_15856116/5813275

相关文章

  • mysql数据库表映射实体类
     分享知识传递快乐JDBC连接数据库;通过配置文件连接数据库;反射指定表生成实体类;反射当前数据库下所有表生成实体类;类名、属性名、get/set方法名都采用驼峰命名类名注释、属......
  • mysql id为string类型 不能自增 新增的时候这个该怎么办?
    当一张表的主键id是string类型的,并且不能自增新增的时候可能就会一直报错这个时候该怎么办呢?使用UUID  把这个id放到对应的地方就行了。......
  • CentOS7 通过YUM安装MySQL5.7
    2进入到目录/usr/local/中:cd/usr/local/3创建目录/usr/local/tools,如果有则忽略: mkdir-ptools4创建/usr/local/mysql目录,如果已存在则忽略:mkdir-pmysql5进入......
  • sqlSever 开窗函数,返回一条数据
    SELECT a.[Id]as1, a.[Version]as2, a.[IsDeleted]as3, a.[CreatedUserId]as4, a.[CreatedUserName]as5, a.[CreatedTime]as6, a.[ModifiedUserId]as7, a.[ModifiedU......
  • postgresql13 rpm方式安装
    环境:OS:Centos7DB:13.8 1.介质下载可以到官网下载相应版本的rpm介质我这里下载的如下介质[root@localhostpg]#ls-lrttotal7968-rw-r--r--.1rootroot1481300......
  • 面试之基础算法题:求一个数字在给定的已排序数组中出现的起始、终止索引号(Java版)
    题目给定一个升序的整数数组,查找某一个值在数组中出现的索引号,例如,输入数组​​[2,3,3,4,4,5]​​​;查找的数是3,则返回​​[1,2]​​。时间复杂度要求为O(logN)。思路......
  • 探究Presto SQL引擎(4)-统计计数
    作者:vivo互联网用户运营开发团队- ShuaiGuangying本篇文章介绍了统计计数的基本原理以及Presto的实现思路,精确统计和近似统计的细节及各种优缺点,并给出了统计计数在......
  • mysql8 清理general_log.csv日志文件
    今天mysql看磁盘空间不足,排查出来general_log.csv占了800G  1.功能如下:开启general_log,会将所有到达MysqlServer的SQL语句记录。一般不会开启开功能,因为log的量会......
  • sql server 即席查询(ad hoc query)与预定义语句(prepared statement)
    在SQLServer中预定义语句(PreparedStatement)与即席查询(AdHocQuery)是啥区别呢?其实官方文档甚至没有一个非常明确的定义说明,像Oracle、MySQL等其它数据库,也没有即席查询......
  • Flink SQL UNNEST/UDTF 如何实现列转行?
    在SQL任务里面经常会遇到一列转多行的需求,今天就来总结一下在FlinkSQL里面如何实现列转行的,先来看下面的一个具体案例. 需求:原始数据格式如下namedata......