mysql 时间索引无效_MySQL日期时间索引不起作用

表结构:

+-------------+----------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------------+----------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |

| total | int(11) | YES | | NULL | |

| thedatetime | datetime | YES | MUL | NULL | |

+-------------+----------+------+-----+---------+----------------+

总行数: 137967

mysql> explain select * from out where thedatetime <= NOW();

+----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+

| 1 | SIMPLE | out | ALL | thedatetime | NULL | NULL | NULL | 137967 | Using where |

+----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+

带有更多表联接的真实查询要更长得多,关键是,我无法使表使用datetime索引。如果要选择特定日期之前的所有数据,这对我来说将很难。但是,我注意到,如果选择较小的数据子集,则可以使MySQL使用索引。

mysql> explain select * from out where thedatetime <= '2008-01-01';

+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+

| 1 | SIMPLE | out | range | thedatetime | thedatetime | 9 | NULL | 15826 | Using where |

+----+-------------+-------------+-------+---------------+-------------+---------+------+-------+-------------+

mysql> select count(*) from out where thedatetime <= '2008-01-01';

+----------+

| count(*) |

+----------+

| 15990 |

+----------+

那么,无论我放置什么日期,该如何确保MySQL将使用索引?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Navicat是一款常用的MySQL数据库管理工具,它可以方便地创建和管理MySQL索引。在MySQL中,索引是一种可以提高数据库查询效率的对象,它类似于书籍的目录,可以快速地找到需要的数据。在Navicat中,可以使用图形化界面来创建和管理MySQL索引。 组合索引MySQL中常用的一种索引类型,它可以同时包含多个字段,并且可以提高查询效率。在Navicat中,创建组合索引也非常简单,只需要在创建索引时选择需要包含的字段即可。 下面是创建组合索引的步骤: 1. 在Navicat中选择需要创建索引的表,右键点击该表,选择“设计表”。 2. 在“设计表”界面中,选择需要创建索引的字段,并且将这些字段拖动到“索引”区域。 3. 在“索引”区域中,选择“组合索引”,并且设置需要包含的字段。组合索引可以包含多个字段,可以根据查询需求来设置。 4. 点击“确定”按钮,Navicat会自动创建组合索引。 在创建组合索引时,需要注意以下几点: 1. 组合索引的顺序非常重要,可以根据查询需求来设置。如果查询条件中的字段包含组合索引的前缀字段,则组合索引会起到作用。 2. 组合索引的字段越多,索引的效率就越高,但是索引的维护成本也越高。因此,在设置组合索引时需要权衡查询效率和维护成本。 3. 组合索引可以提高查询效率,但是在插入、更新和删除数据时会降低效率。因此,在设置组合索引时需要综合考虑查询和写入的需求。 总之,在Navicat中创建和管理MySQL索引非常简单,只需要使用图形化界面即可。同时,需要根据实际需求来设置索引,以提高查询效率和降低维护成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值