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)使用全表扫描进行简单的选择查询的主要内容,如果未能解决你的问题,请参考以下文章