如何在MySql的DATETIME字段的日期部分创建索引
如何在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 ”
回答:
如果我没记错的话,这将运行整个表扫描,因为您正在通过函数传递列。MySQL将乖乖地为每一列运行该函数,而绕过索引,因为查询优化器无法真正知道函数的结果。
我要做的是这样的:
SELECT * FROM transactionlist WHERE TranDateTime BETWEEN '2008-08-17' AND '2008-08-17 23:59:59.999999';
那应该可以给您提供2008-08-17发生的一切。
以上是 如何在MySql的DATETIME字段的日期部分创建索引 的全部内容, 来源链接: utcz.com/qa/435716.html