开发者社区> 问答> 正文

如何在MySql的DATETIME字段的日期部分创建索引?mysql

如何在DATETIME字段的日期部分创建索引?

mysql> SHOW COLUMNS FROM transactionlist; +-------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+------------------+------+-----+---------+----------------+ | TransactionNumber | int(10) unsigned | NO | PRI | NULL | auto_increment | | WagerId | int(11) | YES | MUL | 0 | | | TranNum | int(11) | YES | MUL | 0 | | | TranDateTime | datetime | NO | | NULL | | | Amount | double | YES | | 0 | | | Action | smallint(6) | YES | | 0 | | | Uid | int(11) | YES | | 1 | | | AuthId | int(11) | YES | | 1 | | +-------------------+------------------+------+-----+---------+----------------+ 8 rows in set (0.00 sec) TranDateTime用于保存交易发生的日期和时间

我的表中有超过1,000,000条记录,并且该语句

SELECT * FROM transactionlist where date(TranDateTime) = '2008-08-17' 花费很长时间。

编辑:

看看上“这个博客帖子为什么可以和应该避免MySQL的DATETIME ”

展开
收起
保持可爱mmm 2020-05-17 14:03:20 1256 0
1 条回答
写回答
取消 提交回答
  • 如果我没记错的话,这将运行整个表扫描,因为您正在通过函数传递列。MySQL将乖乖地为每一列运行该函数,而绕过索引,因为查询优化器无法真正知道函数的结果。

    我要做的是这样的:

    SELECT * FROM transactionlist WHERE TranDateTime BETWEEN '2008-08-17' AND '2008-08-17 23:59:59.999999'; 那应该可以给您提供2008-08-17发生的一切。来源:stack overflow

    2020-05-17 14:08:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像