首页 / 知识
如何在MySql的DATETIME字段的日期部分创建索引
2023-04-17 07:22:00

How does one create an index on the date part of DATETIME field in MySql如何在DATETIME字段的日期部分创建索引?
TranDateTime用于保存交易发生的日期和时间 我的表中有超过1,000,000条记录,并且该语句
需要很长的时间。 编辑: 看看这篇博客文章"为什么和应该避免MySQL的DATETIME" 如果我没记错的话,这将运行整个表扫描,因为您正在通过函数传递列。 MySQL将乖乖地为每一列运行该函数,而绕过索引,因为查询优化器无法真正知道函数的结果。 我要做的是这样的:
那应该可以给您提供2008-08-17发生的一切。 我并不是说听起来很可爱,但是一种简单的方法是添加一个仅包含日期部分和索引的新列。 您不能仅在日期部分上创建索引。您有理由吗? 即使您可以仅在日期部分创建索引,优化器也可能仍不将其用于上述查询。 我想你会发现
是高效的,并且可以做您想要的。 另一个选项(与5.7.3及更高版本相关)是基于datetime列创建一个生成/虚拟列,然后对其进行索引。
我不了解mySql的细节,但是仅对整个日期字段编制索引有什么害处? 然后只需搜索:
如果索引是b树或其他合理的索引,则应该很快找到它们。
一个很好而有效的解决方案是使用时间戳记作为时间,而不是日期时间。 Valeriy Kravchuk在据说使用此方法的MySQL站点上针对此问题的功能请求。 "与此同时,您可以使用字符列将DATETIME值存储为字符串,仅索引前N个字符。通过在MySQL 5中谨慎使用触发器,您可以基于此思想创建一个合理而强大的解决方案。" 您可以编写一个非常容易的例程来添加此列,然后使用触发器使该列保持同步。该字符串列上的索引应该很快。 datetime LIKE something%也不会捕获索引。
使用此命令:WHERE datetime_field> = curdate(); 我不了解mySQL的细节,但是仅对整个日期字段编制索引有什么害处? 如果将功能魔术用于*树,则散列...将消失,因为要获取值,必须调用该函数。但是,由于您不知道前面的结果,因此必须对表进行完整扫描。 没有要添加的内容。 也许您的意思是类似计算(计算的)索引……但是到目前为止,我仅在IntersystemsCaché中看到了这一点。我认为关系数据库(AFAIK)中没有这种情况。 我认为,以下是一个好的解决方案(更新的clintp示例):
我认为您使用 如果修改表是一种选择,或者您要编写一个新表,请考虑将日期和时间存储在具有相应类型的单独列中。 通过减小键空间并减少存储量(与从datetime导出的仅日期的列相比),可以提高性能。 这也使得甚至在其他列之前也可以在复合键中使用。 在OP的情况下:
而不是基于函数创建索引(如果在mysql中甚至可能),请使where子句进行范围比较。就像是:
这使数据库可以使用TranDateTime上的索引(是否存在一个索引,对吗?)来进行选择。 "解释"怎么说? (运行EXPLAIN SELECT * FROM transactionlist,其中date(TranDateTime)='2008-08-17') 如果由于date()函数未使用索引,则范围查询应运行得很快: 从事务列表中选择*,其中TranDateTime> ='2008-08-17'和TranDateTime <'2008-08-18'
仅使用日期 |
最新内容
相关内容
linux中用户创建命令?
linux中用户创建命令?,密码,系统,用户,软件,命令,联系方式,管理,信息,用户名,新用户,linux怎么添加用户1、打开xshell软件,远程访问您的服务器linux命令行创建用户?
linux命令行创建用户?,系统,密码,软件,新增,用户,联系方式,管理,用户名,命令,账号,Linux中如何创建用户和用户组Linux如何创建用户?打开xshelllinux管道创建命令?
linux管道创建命令?,通信,标准,信息,地方,管道,命令,环境,流向,通用,工具,Linux的管道命令如何使用?1、管道命令只处理前一个命令正确输出,不处linux创建分区命令是?
linux创建分区命令是?,系统,工具,分区,电脑,情况,位置,网络,信息,数据,环境,在LINUX系统中,分区与格式化硬盘的命令是什么?fdisk/sfdisk:命令行linux创建pc端命令?
linux创建pc端命令?,名字,系统,密码,名称,图片,环境,软件,首次,文件夹,命令,Linux虚拟机命令如何创建新的文件和文件夹首先,连接相应linux主机,linux命令行创建组?
linux命令行创建组?,系统,代码,密码,软件,用户组,用户,命令,选项,用户名,文件夹,linux命令界面中怎么新建用户组1、打开xshell软件,远程访问您linux创建密码命令?
linux创建密码命令?,密码,系统,地址,联系方式,软件,用户,用户名,位置,管理,命令,linux系统怎么创建一个用户为英文名字,密码为lewis,1、首先需linux创建组账户命令?
linux创建组账户命令?,系统,密码,软件,代码,用户组,用户,命令,新增,管理,用户名,Linux中如何创建用户和用户组1、linux一条命令不能创建多个用linux创建命令简写?
linux创建命令简写?,系统,数据,命令,文件,环境,档案,位置,文件夹,目录,终端,LINUX中,创建文件夹、文件命令及清除命令。1、创建文件夹mkdir命linux命令创建pkg?
linux命令创建pkg?,名称,文件,命令,系统,首次,数据,位置,不了,时间,名字,linux新建文件命令是什么?1、终端下键入:touch加文件名,这样就创建了一linux创建硬链接命令?
linux创建硬链接命令?,数据,系统,链接,地方,信息,文件,概念,时间,位置,工作,Linux查看—个目录下所有文件,不包括隐藏文件用哪条命令?1、ls命如何在linux执行命令?
如何在linux执行命令?,单位,电脑,命令,系统,基础,发行,工具,工作,信息,文件,mv什么意思呢?1、MV的意思具体如下:mV是一个较小的电压单位,可以用