SQL效率-查询条件需避免使用函数处理索引字段

一个sql效率的问题

问题

假设created_at 是date类型、是索引,那么以下2种方式有没效率差异:

  1. WHERE TO_CHAR(created_at, ‘YYYY-MM-DD’) = ‘2020-02-01’
  2. WHERE created_at = TO_DATE(‘2020-02-01’ , ‘YYYY-MM-DD’)

DBA回复

有的,第一个不会走索引,因为使用了函数。

解释

在 SQL 中,对字段使用函数(如 TO_CHAR 或TO_DATE)通常会对查询效率产生影响,因为这会使数据库无法使用索引来加速查询。当你对一个已经索引的字段(如例子中的created_at)使用函数时,这个索引通常会被绕过,导致全表扫描,从而降低查询性能。

在以上例子中:

WHERE TO_CHAR(created_at, ‘YYYY-MM-DD’) = ‘2020-02-01’ 将 created_at字段转换成字符串,然后与一个字符串进行比较。这会导致数据库无法使用索引,因为它在进行比较之前需要将字符串转换回日期格式。

WHERE created_at = TO_DATE(‘2020-02-01’ , ‘YYYY-MM-DD’)将一个字符串日期转换为日期格式,然后与 created_at 字段进行比较。那么这个查询仍然可以使用索引,因为转换操作是在 WHERE 子句外部完成的。

因此,第二个查询(WHERE created_at = TO_DATE(‘2020-02-01’ ,‘YYYY-MM-DD’))在大多数情况下应该比第一个查询更快,因为它可以利用索引。然而,这也取决于数据库的优化器如何处理这种情况,以及表中的数据分布。

如果可能的话,尽量避免在 WHERE子句中对索引字段使用函数,以保持查询性能。如果需要以特定的格式进行日期比较,考虑在应用层进行这种转换,而不是在数据库层。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/599822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牢牢把握“心价比”,徕芬的业绩爆发是一种必然?

回顾徕芬的2023年 ,战果颇为丰硕:上半年就完成2022年全年的销售额,同比增长245%;用户增长超500万;多次取得线上销售量份额第一…… 虽然业绩突破背后也有消费复苏的激励作用,但具体到电吹风市场&#xff0…

一篇文章认识微服务中Eureka的原理和服务注册与发现

目录 1、认识Eureka 2、Eureka原理 2.1 和Dubbo架构对比: 2.2 三大角色 3、微服务常见的注册中心 3.1 Zookeeper 3.2 Eureka 3.3 Consul 3.4 Nacos 3.5 区别 Netflix 在设计Eureka 时,遵循的就是AP原则。 CAP原则又称CAP定理,指的…

SSM在线手机品牌商城----计算机毕业设计

项目介绍 该项目为前后台项目,分为普通用户与管理员两种角色,前台普通用户登录,后台管理员登录; 管理员角色包含以下功能: 管理员登录,用户管理,品牌管理,子品牌管理,商品管理,订单管理,留言板管理等功能。 用户角…

Eclipse先关的一些配置

启动配置设置 配置项详细说明: -Xms:初始堆内存大小,设定程序启动时占用内存大小,默认物理内存1/64 -Xms -XX:InitialHeapSiz-Xmx:最大堆内存,设定程序运行期间最大可占用的内存大小。如果程序运行需要…

博客摘录「 什么是QPS、TPS、吞吐量?- 高并发名词概念」2024年1月5日

1.什么是高并发? 高并发(High Concurrency)。通常是指系统在短时间内的大量操作。 高并发相关的常见指标有:QPS、TPS、吞吐量、并发数等。 2.QPS(Query Per Second) QPS每秒查询率,是指系统…

KK集团高管变更:陈世欣任总经理,涉无证放贷遭关注,还曾被处罚

近日,KK集团关联公司广东快客电子商务有限公司(下称“KK集团”)发生工商变更,其中郭惠波不再担任该公司总经理一职,由陈世欣接任。而在早前,陈世欣曾于2020年取代吴悦宁担任总经理职务,2021年7月…

上帝视角俯视工厂设计模式

引言 本篇聊聊设计模式中的简单工厂、工厂方法、抽象工厂设计模式,争取在看完这篇后不会再傻傻分不清以及能够应用在实际项目中 背景 以一个咱们都熟悉的场景举个例子,我们平时都会戴口罩,用来过滤一些普通病毒,大致的设计如下…

C++矩阵例题分析(3):螺旋矩阵

一、审题 时间限制:1000ms 内存限制:256MB 各平台平均AC率:14.89% 题目描述 输出一个n*n大小的螺旋矩阵。 螺旋矩阵的样子: 输入描述 共一行,一个正整数n,表示矩阵变长的长度…

NGUI基础-Widget

目录 Widget是什么 Widget组件包含的属性 Pivot Depth Size snap Aspect Free Based on Width Based on Height Widget是什么 在Unity UI系统中,"Widget"是指UI元素的基类,它为UI元素提供了位置、大小和锚点等基本属性。通过使用&qu…

LeetCode 2:两数相加

一、题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个…

C-浮点数类型表示

文章目录 尽管最近有些小小的迷茫,但是刷题不能马虎啊!最近在做790. 数的三次方根1,所以回顾一下C语言中是如何表示浮点数类型的。 以下是ChatGPT的回复: Elaborate on floating point types in C, such as tails and exponents…

QT上位机开发(网络程序界面开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 传统的上位机对接方式还是以232、485、can为主,随着网络的发展,越来越多的设备都是以网络进行通信的。毕竟相比较之前&…

java练习题之List(ArrayList)集合练习

List集合 习题: 1:完成以下填空: List 接口的特点是元素 有序 (有|无)顺序, 可重复 (可以|不可以)重复; 2:(List)关于List 集合描述正确的是(…

python的getattr和getattribute调用

1 python的getattr和getattribute调用 python类的属性包括类属性、实例属性, 类属性:直接在类顶层赋值,或通过类名.属性名值赋值; 实例属性:通过self赋值,或通过实例名.属性名值赋值; 类实例…

肠道炎症与年龄和阿尔茨海默病病理学相关:一项人类队列研究

谷禾健康 ​阿尔茨海默 研究表明,慢性低水平的炎症(“炎症衰老”)可能是年龄相关疾病的一个介导因素,而肠道微生物通过破坏肠道屏障可能会促进炎症。 虽然老化和阿尔茨海默病(AD)与肠道微生物群组成的改变有…

Mybatis缓存实现方式

文章目录 装饰器模式Cache 接口及核心实现Cache 接口装饰器1. BlockingCache2. FifoCache3. LruCache4. SoftCache5. WeakCache 小结 缓存是优化数据库性能的常用手段之一,我们在实践中经常使用的是 Memcached、Redis 等外部缓存组件,很多持久化框架提供…

SQLAlchemy快速入门

安装依赖 pip install sqlalchemy pip install pymysql创建数据库和表 # 创建数据库 drop database if exists sqlalchemy_demo; create database sqlalchemy_demo character set utf8mb4; use sqlalchemy_demo;# 创建表 drop table if exists user; create table user (id …

ClickHouse基础介绍

目录 前言 1、什么是clickhouse 2、OLAP场景的关键特征 3、列式存储更适合于OLAP场景的原因 4、clickhouse的独特功能 5、clickhouse的缺点 6、性能 6.1、单个大查询的吞吐量 6.2、处理短查询的延迟时间 6.3、处理大量短查询的吞吐量 6.4、数据的写入性能 前言 11月…

Keras实现seq2seq

概述 Seq2Seq是一种深度学习模型,主要用于处理序列到序列的转换问题,如机器翻译、对话生成等。该模型主要由两个循环神经网络(RNN)组成,一个是编码器(Encoder),另一个是解码器…

C++——list容器放入赋值,交换与大小操作

1. list 赋值和交换 功能描述: 给list容器进行赋值,以及交换list容器 函数原型: 1.assign(beg, end); //将[beg, end)区间中的数据拷贝赋值给本身 2.assign(n, elem); //将n个elem拷贝赋值给本身 3.list& operator(const list &lst);//重载等…