首页 > 其他分享 >导致索引失效的几种情况

导致索引失效的几种情况

时间:2022-09-07 16:44:37浏览次数:72  
标签:code -- 几种 索引 失效 WHERE SELECT stock

1.用!=或者<>导致索引失效

select * from table1 where name != 'zhangsan'

select * from table1 where name <> 'zhangsan'

  

2.函数导致的索引失效  如果使用函数在索引列,这是不走索引的。

SELECT * FROM user WHERE DATE(create_time) = ‘2020-09-03’; 

 

3.索引列参与计算,不走索引

SELECT `username` FROM `t_user` WHERE age=20;-- 会使用索引
SELECT `username` FROM `t_user` WHERE age+10=30;-- 不会使用索引
SELECT `username` FROM `t_user` WHERE age=30-10;-- 会使用索引

  

4.索引列使用函数,可能不走索引

SELECT username FROM t_user WHERE concat(username,'1') = 'admin1';-- 不会使用索引,因为使用了函数运算,原理与上面相同
SELECT username FROM t_user WHERE username = concat('admin','1');-- 会使用索引

  

5.索引列使用 like 语句,可能不走索引

SELECT * FROM USER WHERE username LIKE 'mysql测试%'   --走索引
SELECT * FROM USER WHERE username LIKE '%mysql测试'   --不走索引
SELECT * FROM USER WHERE username LIKE '%mysql测试%'  --不走索引

  

6.数据类型隐式转换,字符串列与数字直接比较,不走索引

-- stock_code字符串类型带索引
SELECT * FROM `stock_data` WHERE stock_code = '600538'  --走索引
SELECT * FROM `stock_data` WHERE stock_code = 600538  --不走索引

  

7.尽量避免 OR 操作,只要有一个字段没有索引,改语句就不走索引,不走索引

-- stock_code带索引,open不带索引
SELECT * FROM `stock_data` WHERE `stock_code` = '600538' OR `open` = 6.62  -- 不走索引
-- stock_code带索引,up_down_pre带索引
SELECT * FROM `stock_data` WHERE `stock_code` = '600538' OR `up_down_pre` = 5.1  -- 走索引

  

8.is null,is not null也无法使用索引,不走索引

SELECT * FROM t_user WHERE username IS NULL -- 不走索引
SELECT * FROM t_user WHERE username IS NOT NULL -- 不走索引

  

9.索引列使用 in 语句,可能不走索引

-- stock_code数据类型为varchar
SELECT * FROM `stock_data` WHERE `stock_code` IN ('600538')  -- 走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN ('600538','688663','688280')  -- 走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN (大量数据)  -- 不走索引
SELECT * FROM `stock_data` WHERE `stock_code` IN (600538)  -- 不走索引

  

建议:%linux%类的搜索需求,可以使用elasticsearch+mongodb 专门做搜索服务的数据库产品

标签:code,--,几种,索引,失效,WHERE,SELECT,stock
From: https://www.cnblogs.com/rxqq/p/16666346.html

相关文章

  • JAVA 几种常见的 ENUM
    方法一:常量在JDK1.5之前,我们定义常量都是:publicstaticfianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法publicen......
  • Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib
    引用于:https://www.cnblogs.com/kaka/archive/2013/03/06/2945514.html     比较的是四种复制的方式,分别为Apache的BeanUtils和PropertyUtils,Spring的BeanUtils......
  • 深入理解全文搜索引擎 Elasticsearch
    注:本文摘抄自:https://mp.weixin.qq.com/s/Q-QV86XntKniQlMohIaexQ生活中的数据搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:结......
  • gorm如何支持软删除+联合唯一索引
    gorm默认支持软删除如果想要支持联合唯一索引,就需要用到一个gorm的插件库:gorm.io/plugin/soft_deleteBydefault,gorm.Modeluses*time.TimeasthevaluefortheDel......
  • global 声明全局变量、作用域、及重新定义变量值可以让global失效
    global声明全局变量,非常重要的。#global声明全局变量后,再对此变量赋值是不起作用的#global声明全局变量后,不能再在别的地方global声明相同名称的变量。global_var='b......
  • java下载文件的几种方式
    publicHttpServletResponsedownload(Stringpath,HttpServletResponseresponse){try{//path是指欲下载的文件的路径。Filefile=new......
  • 微信公众号文章采集的几种方案
    方案一:基于搜狗入口在网上能搜索到的公众号文章采集相关的信息来看来看,这是最多、最直接、也是最简单的一种方案。一般流程是:搜狗微信搜索入口进行公众号搜索选取公......
  • JMeter 常用的几种断言方法
    一、Jmeter断言背景在使用Jmeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言。断言是在请求的返回层面增加一层判断机制。因为请求成功了,并......
  • 空间点索引算法-GeoHash
    介绍GeoHash是一种空间地址编码方法,能够把二维的空间经纬度数据编码成一个字符串。一个字符串代表某一矩形区域,矩形区域内所有的点都共享相同的GeoHash字符串。相当于给......
  • 单例模式的几种实现
    单例模式为什么要有单例模式实际编程应用场景中,有一些对象其实我们只需要一个,比如线程池对象、缓存、系统全局配置对象等。这样可以就保证一个在全局使用的类不被频繁地......