mysql 索引失效case 总结

MySQL CASE WHEN实战:分类统计、行转列与性能优化全解析 在SQL查询中,条件逻辑是数据处理的核心要素,而CASE WHEN则是实现条件判断最灵活的工具之一。它通过顺序匹配规则,将复杂业务口径转化为清晰的分支表达式,常被用于数据汇总、分类统计与报表透视。借助CASE WHEN配合聚合函数,可以在一次扫描中完成多口径指标计算,避免多次子查询带来的性能损耗,同时还能将流水明细横向扩展为宽表,便于趋势分析与可视化展示。在实际工程中,CASE WHEN的使用也需警惕性能红线:在WHERE中滥用易导致索引失效,在THEN中嵌入子查询可能引发逐行查询风暴。掌握其语法细节、执行 阅读详情

日期类型可以直接和string格式的字符串比较

select * from xxx where event_time>'2018-06-02' 可以使用索引, mysql默认会把后面的字符串转成date类型。可以使用between and

select * from xxx where date(event_time)>'2018-06-02'   不能使用索引

如果时间戳日期和时间都要比较, 最好使用两个字段保存这个时间戳, 这样可以利用索引

select * from xxx where event_time>1239237428734; --  使用错误, 不能这么用。可以使用from_unixtime()将数字转成日期类型

 

 

 将date和time合并成一个datetime

select str_to_date(concat(ICDate,' ',ICTime),'%m/%d/%y %h:%i:%s %s')   from XXXX

 

参考: https://stackoverflow.com/questions/2758486/mysql-compare-date-string-with-string-from-datetime-field

 

 

其他索引总结:

where条件等号两边字段类型不同,不走索引

like 'XXX%' 走索引, '%XXX%'不走索引

对字段进行函数运算不走索引

组合索引 只使用后面的字段不走索引,使用前后的字段走索引. 第一个字段有参于(而且字段类型匹配 没有函数运算),那么会走索引, 第一个字段可以在sql中的任意位置

 组合索引遇到第一个不等值条件 即中断后面字段使用索引

 字段类型不匹配,不走索引

 

 示例:

name varchar, addr varchar, age int。 创建组合索引为name + addr + age

select * from t_user where name like '123%' and age>19;  走索引 type=range

select * from t_user where age>19 and name like '123%' ;  走索引 type=range

select * from t_user where name =123 不走索引 type=all

select * from t_user where name='123' 走索引 type=ref

select * from t_user where addr like '上城%' and age>30; 不走索引 type=all

 

explain 是否使用了索引

type=ALL是全表扫描

只要不是ALL, 都能使用索引,只是使用索引的方式不同,性能也有差异==>依次从好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL

关于explain各个字段的解释:https://www.cnblogs.com/david97/p/8072164.html

 

索引不是越多越好, 两个index进行merge有时还不如只使用一个index

组合索引创建的依据:select distinct(xxx)/count(*) 值越大说明区分度越高 组合索引的价值越高 

什么时候创建组合索引?  单列上查询出来的数据量都很大,但是两个组合查询的结果很小 ,此时创建组合索引就比较有意义

 (原始的离线度都小,组合的离散度会大???)    0.8*0.8=0.64       0.8*0.5=0.4    如果整体的数据量级别很大,也有点效果

 

 

索引的类型

 BTREE的时间复杂度: https://blog.youkuaiyun.com/weixin_38399962/article/details/79409118

 

orderby 是否使用索引

https://my.oschina.net/u/912810/blog/325177

orderby用到的索引和where中的索引如果一致, 可以提升不少性能

 

 

字符类型的索引需要指定长度

ALTER TABLE t_yyy ADD INDEX `xxx` (`request_type` ASC, `request_param`(15) ASC);

 

转载于:https://www.cnblogs.com/yszzu/p/9255769.html

MySQL条件判断函数实战:IF、CASE、NULLIF等核心用法与性能优化 在数据库查询与数据处理中,条件逻辑判断是构建复杂业务规则的核心基础。其原理是通过在SQL层面嵌入程序化判断,实现对数据的动态筛选、转换与计算,从而将业务逻辑下推至数据库引擎,显著提升处理效率并简化应用层代码。这一技术对于数据清洗、报表生成、动态聚合统计等场景具有极高价值,能够优雅处理空值、异常值及多分支业务规则。本文将深入解析MySQL中IF()、CASE、NULLIF()等关键函数,通过实际案例探讨其在**数据清洗**与**动态聚合**中的高级应用,并揭示常见的性能陷阱与优化方案,帮助开发者编写高效、健壮 阅读详情

相关推荐

MySQL CASE WHEN 详解:从基础语法到行转列与性能优化

在数据库开发与数据分析工作中,SQL 查询是日常高频操作,而条件逻辑处理更是其中的核心能力。如何根据业务规则动态生成字段值、完成复杂统计,是每个开发者绕不开的课题。CASE WHEN 作为 SQL 标准中的条件表达式,提供了在查询结果集中进行分支判断的简洁方案,既支持简单的等值映射,也能通过搜索表达式处理范围与复合条件。掌握 CASE WHEN 的底层匹配原理,能够帮助开发者高效完成枚举值翻译、数据分段打标、行转列汇总、自定义排序以及批量更新等典型场景。同时,在实际工程中还需注意与索引、NULL 值处理、数

weixin_33404102的博客 73

【示例】MySQL-不同case下索引的使用分析

本文主要讲述不同SQL语句下,索引的生效情况。关于索引的前置知识,本文不再讲述。

HMTeen 640

MySQL数据汇总利器:CASE WHEN从条件计数到行转列实战

在数据分析与报表开发中,SQL聚合查询是必备技能。MySQL提供了强大的分组与条件分支能力,其中CASE WHEN可以在聚合过程中实现行内分流,对数据按业务规则进行条件计数、金额分桶与行转列透视。理解SQL执行顺序(WHERE→GROUP BY→SELECT)是正确使用CASE WHEN的前提,它能在保留原始行数据的同时输出多维度统计量,显著提升报表开发的灵活性和准确性。本文从订单数据汇总场景出发,深入讲解CASE WHEN在条件计数、比率计算、金额分桶和透视表构建中的实战用法,并分享常见的数据翻倍、类型陷

weixin_31102231的博客 250

mysql 的运用:case函数,子查询,like和regexp,创建索引,视图

1,case函数, select* case when 条件1 then(输出1) when 条件2 then(输出2) when 条件3 then(输出3) from 表名; 下面这张里面的命令没有加 as mojor 就不是很好看。 2,查询最大值,这里查询语句是错误的,不能这样查询,有两个显示标题,max(price) 它会从最上面开始比较,不会在全部...

49天的博客 1765

MySQL CASE 用法详解:从语法到行转列、自定义排序实战

在数据库开发中,条件逻辑是SQL查询与数据处理的核心能力之一。无论是报表统计、数据清洗,还是业务规则映射,掌握灵活的条件表达式都至关重要。MySQL中的CASE表达式作为标准SQL语法,提供了简单CASE与搜索CASE两种写法,能够实现等值匹配、区间判断、多条件组合等复杂逻辑。利用CASE结合聚合函数,可以轻松完成行转列、分段统计等报表需求;在ORDER BY中借助CASE可实现自定义排序;在UPDATE语句中使用CASE则能一次更新多字段,保证原子性。合理使用CASE还能优化SQL性能,避免索引失效。本文

weixin_31188927的博客 227

MySQL CASE WHEN 用法详解:从条件判断到复杂查询优化

在数据库查询中,常常会遇到需要根据字段值进行条件转换的场景,例如将数字状态码映射为业务文案,或将明细数据按规则分组。SQL 作为数据操作的核心语言,其条件逻辑表达能力直接影响查询效率与可读性。CASE WHEN 是 MySQL 中实现行级条件判断的关键语法,支持等值、范围、模糊匹配等多种条件,比 IF() 函数更灵活,能够与聚合函数结合完成条件统计、行转列、自定义排序等高级操作。理解其求值顺序、NULL 处理与类型一致性,可避免隐性错误,同时通过合理的索引配合与查询优化,能在大数据量下保持良好的性能。从基础

weixin_33462167的博客 265

where 中使用 case when 无法使用索引

1.版本 1)操作系统 #cat /proc/version Linux version 4.14.76-1.el7.rx.x86_64 (root@8dfc8db5e7914181ad0cf0484d9be73a) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)) #1 SMP Thu Oct 18 09:52:06 +06 2018 2)mysql数据库版本 > select version(); +-----------+ | ve

渔夫数据库笔记 3888

MySQL CASE WHEN实战指南:从语法到行转列、批量更新的完整用法

SQL中的条件逻辑常被用来在查询中实现分支判断,而CASE WHEN作为标准SQL表达式,能在数据库内部完成复杂的条件映射与计算,从而避免将大量数据拉回应用层逐行处理。它不仅可以做等值判断,还能配合SUM、COUNT等聚合函数实现条件统计与行转列,甚至可用于UPDATE批量赋值、ORDER BY自定义排序等场景,是提升数据查询与开发效率的利器。结合MySQL实践,系统梳理CASE WHEN的两种语法、典型用法及性能注意事项,帮助开发者在实际业务中更高效地完成数据处理。

weixin_32430941的博客 238

MySQL开窗、CASE WHEN以及CTE的使用和理解

MySQL开窗、CASE WHEN以及CTE的使用和理解一、开窗函数什么时候适合用开窗函数:1、用法分类2、over()的使用3、partition by 的使用4、排序函数5、windows frames 自定义窗口6、默认的 window frames7、CTE表达式8、分析函数lead( x [, y] [, z] ) over( )lag(x [, y] [, z] ) over( )first_value( x ) over( )last_value( x ) over( )nth_val

qq_15994257的博客 1854

MySQL CASE表达式详解:语法、行转列、聚合与性能优化实践

SQL查询中,经常需要将字段值按业务口径进行条件映射,比如状态码转文字、金额分档统计等。CASE表达式作为SQL内置的if-else,能够在SELECT、WHERE、ORDER BY等子句中动态生成所需结果,是数据分析与报表开发的高频利器。本文从简单CASE与搜索CASE的语法差异入手,剖析其短路执行逻辑与NULL比较陷阱,进一步以行转列透视和条件聚合(COUNT/SUM/AVG)为例展示CASE的典型应用场景。同时结合索引失效、类型一致性、ELSE兜底等实战案例,讨论CASE在性能优化和工程实践中的注意事

weixin_34116482的博客 237

Windows MCP 安装教程:让 AI 代理与 Windows 系统无缝交互

通过以上步骤,你已经成功安装和配置了 Windows MCP 服务。现在你的 Cursor 编辑器可以通过 MCP 协议与 Windows 系统进行深度交互,AI 代理能够:启动和控制应用程序执行系统命令自动化 UI 操作获取系统状态信息这为 AI 辅助开发和工作流程自动化提供了强大的基础。如果你在使用过程中遇到任何问题,欢迎在评论区讨论或查看项目的官方文档。

chenchihwen的专栏 3350

case when中的条件不能用上索引

今日在对一报表数据源作优化时无论任何都不能让其走索引.数据源部分语句如下:select cityCode,servtype,1,channel,b.day_time, sum(case when to_number(...

3655

dify工作流的原理

摘要: Dify 工作流是一个基于有向无环图(DAG)的智能任务编排系统,支持多节点(如LLM调用、API工具、条件分支等)的可视化拖拽与流程编排。其核心原理包括执行引擎(解析DAG并管理节点依赖)、上下文变量传递(类Jinja模板的变量引用机制)和状态持久化(存储执行日志与中间结果)。工作流通过事件驱动执行,支持异步任务调度,并与RAG知识库、LLM服务等模块深度集成,最终可发布为API或对话应用。技术栈基于Python(FastAPI+Celery)和PostgreSQL,实现低代码化的AI应用开发。

nbspzs的专栏 2187

Mysql索引失效的一些CASE, 工作中需要避免

转自:https://blog.youkuaiyun.com/wuseyukui/article/details/72312574 案例所用的表结构、索引、与数据如下: 索引失效与优化 1、全值匹配我最爱 2、最佳左前缀法则(带头索引不能死,中间索引不能断) 如果索引了多个列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始 并且 不跳过索引中的列。 正确的示例参考上图。 错误的...

蒜蓉粉丝蒸扇贝的专栏 1415

瑞萨单片机,把CS文件转换为CC

1、打开CC的软件: 点击坐上角的"START" 点击"Create New Project"的"GO": 导入工程: 如下图设置后,点击"Create" 2、进入到CC的开发界面: 可以看到原启动库文件以asm文件的方式直接出现在工程中: 删除新生成的main.c,保留导入的r_main.c(以你自己的代码为准): 注意添加所有的头文件路径: 点击"...

weixin_37611121的博客 1228

从零到一:手把手教你用Python搭建医学影像识别CNN模型(附完整代码)

本文详细介绍了如何使用Python和TensorFlow/Keras从零开始构建一个医学影像识别的CNN模型,涵盖数据预处理、模型架构设计、训练调优及部署全流程。通过实战案例和完整代码,帮助开发者快速掌握深度学习在医学影像识别中的应用,特别适合医疗AI领域的初学者和研究者。

spark7igniter的博客 200

测一测自己的Sql能力之MYSQL的函数会造成索引失败

本片详细说明了MYSQL的函数会造成索引失败的注意要点,并给出具体操作实例,如有出入还望指正。欢迎大家关注【可为编程】,成长,进步,编程,技术、掌握更多知识!

永远热泪盈眶 坚持输出 747

【js逆向学习】新手视角破解「广东省公共资源交易平台」

学习js逆向,破解广东省公共资源交易平台,详细记录个人探索、踩坑全过程。网站地址: aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c=仅供学习参考,如有疑问欢迎交流,一起学习进步。

DCSDA的博客 3316

MySQL逻辑函数全解析:从CASE WHEN到空值处理的实践指南

在数据库查询与数据处理中,逻辑判断与条件分支是构建复杂业务逻辑的基石。无论是字段值翻译、分档统计,还是空值兜底,都离不开对判断表达式与取值函数的深入理解。MySQL提供了从IF、CASE WHEN到IFNULL、COALESCE、NULLIF的完整函数家族,它们各自适用于不同的场景:简单二值判断用IF,多条件分支用CASE WHEN,空值处理优先COALESCE。同时,三值逻辑中的NULL陷阱、NOT IN空结果问题、运算符优先级以及隐式类型转换,都是导致SQL结果异常的常见根源。合理运用逻辑函数不仅能提升

weixin_34098209的博客 180

期末求生指南:手把手教你用F12开发者工具绕过百一测评的切屏检测(JavaScript/jQuery实战)

本文详细介绍了如何利用F12开发者工具绕过百一测评的切屏检测,通过分析JavaScript/jQuery中的blur()和focus()事件监听机制,提供实战技巧动态修改代码。文章涵盖事件监听定位、代码修改方法及应对高级检测机制的策略,适合需要临时解决线上考试限制的学生参考。

weixin_30731305的博客 447

深度解析:企业AI效能度量框架的核心指标与落地路径,收藏级干货

资源成本:GPU利用率从31%提升到75%,云费用减少了50万元/年;工程效率:模型迭代周期从2周缩短到3天,部署成功率从70%提升到95%;模型性能:CTR从8%提升到12%,CVR从3%提升到4.5%;业务价值:增量收入达200万元/月,ROI达180%;伦理风险:推荐结果的差异影响比从0.7提升到0.9,用户投诉率下降了30%。现在,当CEO再问「AI项目值多少钱?

AI天才研究院 1807

MySQL自定义排序全解析:FIELD、CASE WHEN、中文排序与性能调优

数据库查询中,行的返回顺序看似由ORDER BY决定,实则默认排序规则只能按数值大小或字符集码点机械比较,难以表达“待付款优先于已发货”这类业务优先级。MySQL自定义排序正是解决该问题的核心技巧:通过FIELD()将枚举值映射为排序权重,或用CASE WHEN构造虚拟排序列,把复杂规则翻译成可执行的排序键。这些方法在订单状态流转、CMS频道推荐、中文拼音排序、期号自然排序等场景中尤为实用,但表达式排序会迫使优化器放弃索引转向filesort,需要结合物化排序列、联合索引和减少排序行数来控制成本。本文系统梳

weixin_30512965的博客 124

prometheus普罗米修斯集监控外部k8s

prometheus普罗米修斯集监控外部k8s

你是我一生的追求 2247

MySQL逻辑函数全解析:IF、CASE WHEN与空值处理实战

逻辑函数是SQL查询中实现条件判断与空值处理的核心工具。理解IF、IFNULL、NULLIF、COALESCE、CASE WHEN等函数的执行原理,能有效提升数据处理的灵活性与查询效率。在数据库开发与数据分析中,通过合理运用条件分支和空值处理,可以避免应用层重复代码,并保障数据计算的安全性。本文系统梳理MySQL逻辑函数的语法细节、典型应用场景及性能陷阱,帮助工程师写出更健壮、高效的SQL。

weixin_32308101的博客 209

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL COALESCE函数详解与应用实践

在数据库开发中,NULL值处理是常见的技术挑战。SQL标准中的COALESCE函数提供了一种优雅的解决方案,它通过返回参数列表中第一个非NULL值来简化NULL处理逻辑。从原理上看,COALESCE实现了短路求值特性,能有效提升查询性能。这一函数在数据展示默认值处理、多表JOIN字段选择和计算字段容错等场景中具有重要技术价值,特别是在电商价格体系、多语言系统等实际业务场景中表现突出。作为MySQL核心函数之一,COALESCE与IFNULL、CASE WHEN等替代方案相比,在语法简洁性和跨数据库兼容性方面

weixin_33860528的博客 452

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MySQL CASE表达式完全指南:从基础语法到行转列与性能优化

在SQL开发中,条件判断是构建复杂查询的核心能力之一,而CASE表达式正是实现灵活条件逻辑的通用工具。它不仅能完成简单的等值匹配,还能处理范围判断、多条件组合等复杂场景,是数据清洗、报表统计和业务逻辑转换中的高频语法。理解CASE表达式的执行顺序与NULL处理机制,是避免统计口径出错的关键。在实战中,利用CASE可以实现高效的行转列操作、通过count(case when)完成多维度条件计数,也能结合聚合函数进行分组汇总与占比计算。此外,CASE在自定义排序、存储过程逻辑分支以及数据迁移场景中同样发挥着重要

weixin_28312391的博客 328
上一篇: 2021-03-06
下一篇: Socket心跳包机制
爬虫仔蛙
博客等级 码龄15年 62粉丝 185原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值