首页 > 数据库 >MySQL索引查询条件使用函数导致索引失效

MySQL索引查询条件使用函数导致索引失效

时间:2022-09-21 18:01:57浏览次数:79  
标签:00 co MySQL 索引 time device 失效 tb id

 

索引失效

EXPLAIN
SELECT
    dt.name AS deviceName,
    su.`name` AS userName,
    date_format(co.upload_time, '%Y%m%d') as time
FROM
    tb_cust_order co
INNER JOIN sys_user su ON co.work_id = su.id
INNER JOIN tb_device d ON d.id=JSON_EXTRACT(co.use_devices -> '$[0].tbDeviceId','$[0]')
INNER JOIN tb_device_type dt ON dt.id=d.device_type_id
WHERE
    co.unit_id = 1498576617260576769
AND co.`status` = 'SUCCESS'
AND co.upload_time >= '2022-08-01 00:00:00'
AND co.upload_time <= '2022-08-31 59:59:59'
AND JSON_EXTRACT(co.use_devices -> '$[0].tbDeviceId','$[0]') is NOT NULL

 

 

索引生效:加上concat()函数

EXPLAIN
SELECT
    dt.name AS deviceName,
    su.`name` AS userName,
    date_format(co.upload_time, '%Y%m%d') as time
FROM
    tb_cust_order co
INNER JOIN sys_user su ON co.work_id = su.id
INNER JOIN tb_device d ON d.id=CONCAT(JSON_EXTRACT(co.use_devices -> '$[0].tbDeviceId','$[0]'))
INNER JOIN tb_device_type dt ON dt.id=d.device_type_id
WHERE
    co.unit_id = 1498576617260576769
AND co.`status` = 'SUCCESS'
AND co.upload_time >= '2022-08-01 00:00:00'
AND co.upload_time <= '2022-08-31 59:59:59'
AND JSON_EXTRACT(co.use_devices -> '$[0].tbDeviceId','$[0]') is NOT NULL

 

 

 

解决办法:

id=JSON_EXTRACT(co.use_devices -> '$[0].tbDeviceId','$[0]')
慢查询原因:函数会导致索引失效
解决方案:包一层concat()  
id=CONCAT(JSON_EXTRACT(co.use_devices -> '$[0].tbDeviceId','$[0]'))

  

 

标签:00,co,MySQL,索引,time,device,失效,tb,id
From: https://www.cnblogs.com/smileblogs/p/16716549.html

相关文章

  • 【Java面试】面试官为了装X故意为难问你,为什么加索引能提升查询效率?如何回答才能惊呆
    “为什么加索引能提升查询效率”!我们都认为“加索引”提升查询效率是理所应当的竟然还有理由?该怎么回答呢?大家好,我是Mic,一个工作了14年的Java程序员下面分析一下这......
  • mysql日期时间-加减、查询
    --加1天selectdate_add(now(),interval1day);--加1小时selectdate_add(now(),interval1hour);--加1分钟selectdate_add(now(),interval1minute);......
  • 【Mysql】索引类型及对数据库性能的影响
     普通索引:允许被索引的数据列包含重复的值。唯一索引:可以保证数据记录的唯一性。主键:是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使......
  • MySQL学习——执行计划
    MySQL中可以通过explain关键字模拟优化器执行SQL语句,从而知道MySQL是如何处理SQL语句的,这将有利我们做代码的优化。1、MySQL查询执行过程客户端向MySQL服务器发送一......
  • 第十章 ES定时删除日志索引脚本
    一、编写脚本[root@ES-Log-1~]#vimdelete_es_indices.sh#!/bin/bash#主机IPhost_ip="172.16.1.24:9200"#超过10天的索引将要删除delete_overday=10functiond......
  • MySQL学习——分页查询
    在Orcale中我们也介绍过了使用内建视图和rownum来实现分页的操作(Oracle学习——视图、序列、索引),而MySQL有更加方便的实现分页查询的操作。1、LIMIT语法格式SELECT......
  • MySQL查看数据库表容量大小
    1.查看所有数据库容量大小selecttable_schemaas'数据库',sum(table_rows)as'记录数',sum(truncate(data_length/1024/1024,2))as'数据容量(MB)',sum(truncate......
  • MySQL主从同步详解与配置
    MySQL主从同步详解与配置走鹿带凨爱生活,有理想,善思考,能沟通 21人赞同了该文章 https://zhuanlan.zhihu.com/p/335142300MySQL主从同......
  • MySQL指令
    目录SQL语言的分类DQL(数据查询语言)select关键字组合顺序select简单查询用法select条件查询select函数使用select多表连接查询select子查询Union结果集合并Limit分页显示DDL......
  • Mysql SQL查询今天、昨天、n天内、第n天的数据
    查询5分钟前的数据select*fromtablewhereend_datebetweendate_add(now(),interval-300SECOND)andNOW()  查询当天的所有数据SELECT*FROM表名WHEREDAT......