MySQL(版本:5.7.21-ndb-7.5.9-cluster)使用全表扫描进行简单的选择查询

Posted

技术标签:

【中文标题】MySQL(版本:5.7.21-ndb-7.5.9-cluster)使用全表扫描进行简单的选择查询【英文标题】:MySQL (Version : 5.7.21-ndb-7.5.9-cluster) use Full table scan for simple Select Query 【发布时间】:2018-04-05 08:30:28 【问题描述】:

目前,我的查询需要 8 秒才能完成。

查询是:

SELECT CI FROM MyTable WHERE CI = 9787988;

和索引也可用:

CREATE INDEX nidx_MyTable_CI ON MyTable(CI) USING BTREE;

NDB MyTable 有 620 万条记录。 CI 不是主键并且具有空值。 MyTable 有 12 列,具有 VARCHAR/INT/DATE 数据类型。 ANALYZE TABLE 执行没有任何问题。 FORCE INDEX 也返回全表扫描,需要 8 秒才能完成。

如何优化查询以更快地执行?

【问题讨论】:

CI 列的基数是多少?如果基数非常低,那么使用索引实际上可能会受到伤害,这可以解释您的输出。 CI 列或多或少具有独特的价值。因此,基数等于记录数。 【参考方案1】:

如果CI 的数据类型是VARCHAR,则引用9787988。否则,它必须将每个字符串 CI 转换为数字才能进行测试,因此需要进行表扫描。

(当您提供SHOW CREATE TABLE 时,您可能会更快地得到我们的答复。)

【讨论】:

非常感谢,您节省了我的时间。

以上是关于MySQL(版本:5.7.21-ndb-7.5.9-cluster)使用全表扫描进行简单的选择查询的主要内容,如果未能解决你的问题,请参考以下文章

初学mysql,哪个版本比较好

mysql官方下载版本

如何看mysql版本

php5.3配啥版本的mysql

怎么查看mysql版本

java和mysql的连接,驱动是要和mysql版本相对应的吗?