首页 > 解决方案 > 索引列可为空的 MySql

问题描述

我有一列可以为空的 DateTime 类型的列,该列已编入索引。但是在执行 Select 时,没有使用索引。

CREATE TABLE `te3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dataHora` datetime DEFAULT NULL,
`nome` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `IDX_DATAHORA` (`dataHora`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;



SELECT *
FROM te3 
where dataHora between '2018-10-11 15:18:16' AND '2018-10-11 15:18:50';

额外 使用 where

不使用索引。

查询很慢,我该怎么办?只需记住该列必须可以为空

标签: mysqlsqlindexingnullable

解决方案


您的索引可以设置为INVISIBLE

MySQL 支持隐形索引;即优化器未使用的索引。该功能适用​​于主键以外的索引(显式或隐式)。

ALTER TABLE te3 ALTER INDEX index_name VISIBLE;

检查:

SELECT INDEX_NAME, IS_VISIBLE
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_NAME = 'te3';

推荐阅读