首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >select * from table where datetime in month (不破坏索引)

select * from table where datetime in month (不破坏索引)
EN

Stack Overflow用户
提问于 2010-02-24 17:29:52
回答 5查看 6.6K关注 0票数 5

我有一堆带时间戳的行(使用'datetime‘数据类型)

我想选择时间戳在特定月份内的所有行。

该列已建立索引,因此我不能将MONTH(timestamp) =3,因为这将使该索引不可用。

如果我有年和月变量(在perl中),有没有一些可怕的SQL可以使用,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
timestamp BETWEEN DATE($year, $month, 0) AND DATE($year, $month, 31);

但是更好,真的有效吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-24 17:34:52

我实际上会同意你提出的想法;也许会有一点不同:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select *
from your_table 
where date_field >= '2010-01-01'
    and date_field < '2010-02-01'

(当然,由您决定如何正确使用$year$month )

注意< '2010-02-01'部分:如果您的日期包含时间,则可能需要考虑这一点。

例如,如果您有一行日期类似于'2010-01-31 12:53:12'的行,那么您可能希望选中该行--默认情况下,'2010-01-31'表示'2010-01-31 00:00:00'

也许这看起来并不“好”;但它会起作用的;并使用索引...当我遇到这样的问题时,这是我通常使用的解决方案。

票数 11
EN

Stack Overflow用户

发布于 2010-02-24 22:27:03

这实际上是Pascal MARTIN的answer,但避免了必须显式地知道下一年/月是什么(所以当$month == 12时,您不必递增年份和绕过$month ):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my $sth = $mysql_dbh->prepare(<<__EOSQL);
SELECT ...
  FROM tbl
 WHERE ts >= ? AND ts < (? + INTERVAL 1 MONTH)
__EOSQL

my $yyyymm = $year . '-' . sprintf('%02d', $month);

$sth->execute($yyyymm, $yyyymm);

为了获得额外的积分,你也可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
... WHERE ts BETWEEN ? AND (? + INTERVAL 1 MONTH - INTERVAL 1 SECOND)

- INTERVAL 1 SECOND将强制将日期的上限设置为日期时间/时间戳类型,设置为一天的最后一秒,正如Pascal所指出的,这是您想要的上限。

票数 2
EN

Stack Overflow用户

发布于 2010-02-24 17:36:19

如果您需要每年的同一个月,那么您所拥有的索引将不会对您有所帮助,任何SQL语法技巧都不会对您有所帮助

另一方面,如果您需要特定年份的月份,则任何具有日期范围的查询都应该可以做到这一点

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2328051

复制
相关文章
数据库的查询语句_数据库select from where
这是因为: 1 、 在dos窗口中,默认的编码格式gbk,而mysql服务器软件使用的编码utf8 2、在dos窗口输入一个指令,模糊查询当前mysql数据库中所有带有”character”字符集的变 量全部出来 SHOW VARIABLES LIKE ‘%character%’ ;
全栈程序员站长
2022/10/04
1.4K0
数据库的查询语句_数据库select from where
MySQL扩展
mysql中变量不用事前申明,在用的时候直接用“@变量名”。 第一种用法:set @num=1; 或set @num:=1; 第二种用法:select @num:=1; 也可以把字段的值赋值给变量 select @num:=字段名 from 表名 where …… 注意上面两种赋值符号,使用set时可以用 = 或 := ,但是使用select时必须用 :=
化羽羽
2022/10/28
2K0
Mysql索引-不会使用索引的场景
在日常开发中,我们经常会发现,Mysql中一些逻辑上一样的sql,往往性能差异很大,至于为什么会发生这样的问题,今天我们就看看几个常见的案例
小土豆Yuki
2020/11/03
1.2K0
tbase执行select * from table_name limit 10 无反应
sql脱敏: select * from table_name limit 10;
大大刺猬
2022/08/19
6310
MySQL学习笔记(长期更新)
整数:INT。 ⼩数:DECIMAL。 字符串:TEXT。 ⽇期与时间:DATETIME。
关忆北.
2021/12/07
9680
MySQL学习笔记(长期更新)
update set from where
两个表a、b,想使b中的memo字段值等于a表中对应id的name值 表a:id,name 1 王 2 李 3 张 表b:id,ClientName 1 2 3 (MS SQL Server)语句:update b set ClientName = a.name from a,b where a.id = b.id
乔达摩@嘿
2020/09/11
1.6K0
千呼万唤始出来,MySQL 8.0索引三剑客之函数索引
独孤九剑,重剑无锋,大巧不工,通晓剑意,无所施而不可。三剑客之首,函数索引。 函数索引这个概念并不新颖,Oracle早在十年前的Oracle10g中就支持了函数索引,函数索引在Oracle数据库中使用相当广泛和成熟,而MySQL却一直没有开发相关的索引功能。不过好消息是,MySQL 终于在8.0版本引入了这一特性。真的是,千呼万唤始出来,不过好歹还是来了。
吹水老王
2022/05/17
1.7K0
mysql分区函数_mysql 分区可用函数
当然,还有FLOOR(),CEILING() 等,前提是使用这两个分区函数的分区健必须是整型。
全栈程序员站长
2022/06/27
5.9K0
Hive性能优化统计每日IP CREATE TABLE ip_2014_12_29 AS SELECT COUNT(DISTINCT ip) AS IP FROM logdfs WHERE logda
Hive性能优化 1.概述   继续《那些年使用Hive踩过的坑》一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题。下面开始本篇文章的优化介绍。 2.介绍   首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题。 jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次汇总,产生十几个jobs,耗时很长。原因是map reduce作业初始化的时间是比较长的。 sum,
Albert陈凯
2018/04/04
1.7K0
Hive性能优化统计每日IP CREATE TABLE ip_2014_12_29 AS SELECT COUNT(DISTINCT ip) AS IP FROM logdfs WHERE logda
MYSQL 性能优化 index 函数,隐藏,前缀,hash 索引 使用方法(2)
接着上期说,MYSQL 8 的索引的方式相对MYSQL 5.7 有了很多的进步,其中最突出的就是添加的functional indexes , 那么这个功能到底是什么时候开始的有的。
AustinDatabases
2022/07/13
5710
MYSQL 性能优化  index  函数,隐藏,前缀,hash 索引 使用方法(2)
索引为什么失效了
我们发现查询语句索引失效了,原因在于我们在t_modified字段上使用了month函数。
用户7447819
2021/07/23
3100
MySQL入门详解(一)---mysql的语言
当客户端连接到服务器是,MySQL访问控制有两个阶段:连接验证 对用户名密码,请求验证 对权限验证
步履不停凡
2019/09/11
1.3K0
[MySQL]select和where子句优化
数据库优化: 1.可以在单个SQL语句,整个应用程序,单个数据库服务器或多个联网数据库服务器的级别进行优化 2.数据库性能取决于数据库级别的几个因素,例如表,查询和配置设置 3.在数据库级别进行优化,在硬件级别进行优化,平衡可移植性和性能 4.合适的结构,合适的数据类型;执行频繁更新的应用程序大量表(少列);分析大量数据的应用程序少量表(多列);选择合适的存储引擎和索引; 5.压缩适用于InnoDB表的各种工作负载,以及只读MyISAM表 6.选择合适的锁定策略;InnoDB存储引擎可以处理大多数锁定问题 7.配置的主要内存区域是InnoDB缓冲池和MyISAM密钥缓存。 8.优化select语句,这方面技巧同样适用于其他带where的delete语句等,在where子句的列上设置索引;索引对于引用多个列如join和外键尤其重要
唯一Chat
2019/09/10
1.6K0
两千字揭密 MySQL 8.0.19 三大索引新功能:隐藏索引,降序索引,函数索引
导读:本文详细介绍 MySQL 8.0.19 三大索引新功能,隐藏索引,降序索引,函数索引,结合其他同仁的技术应用案例,进一步进行验证改编,最后总结心得,希望对大家有帮助。
数据和云
2020/03/25
1K0
Select From Multi Tables
除了通过Left Join将多个表进行关联外,也可以通过以下方式进行多表之间的关联。 SELECT FROM Table1,Table2
None_Ling
2021/11/24
5330
MySQL深入学习第十八篇-为什么这些SQL语句逻辑相同,性能却差异巨大?
在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。
越陌度阡
2020/11/26
5170
MySQL深入学习第十八篇-为什么这些SQL语句逻辑相同,性能却差异巨大?
MySQL实战十八讲-为什么这些SQL语句逻辑相同,性能却差异巨大?
在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。
越陌度阡
2022/05/06
4030
MySQL实战十八讲-为什么这些SQL语句逻辑相同,性能却差异巨大?
select * from t_student where class between 200 and 300需要执行几次索引树的搜索操作,会扫描多少行
在这个过程中,回到主键索引树搜索的过程,我们称为回表。可以看到,这个查询过程读了 class_idx 索引树的 3 条记录(步骤 1、3 和 5),回表了两次(步骤 2 和 4)。
共饮一杯无
2022/11/28
2770
select 1 from dual
然后觉得有点奇怪,数据库里面都没有创建这个dual表,这个表是从何而来呢?然后Google了一波,理解了一下。
mingmingcome
2021/11/29
1K0
MySQL基础SQL编程学习2
描述:主要学习数据库的DDL数据库定义语言,比如CREATE , DROP, ALTER 等等:
全栈工程师修炼指南
2022/09/29
7.3K0
MySQL基础SQL编程学习2

相似问题

SELECT * FROM $table WHERE FROM= $x?

33

select * from table where VS select column from表where

30

select from table where @variable in(表列)

10

SELECT * FROM table WHERE row IN ('list')

33

SELECT FROM Table where the table name in a variable SQL

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文