首页 > 解决方案 > 为什么即使我不使用它,多个索引的查询也会变得很慢

问题描述

我正在使用 TiDB 做一些测试。

我创建了一个如下表

CREATE TABLE users(
 id BIGINT PRIMARY KEY NOT NULL,
 updated BIGINT NOT NULL
)

我用 2 个索引将大约 100,000,000 行加载到该表中

CREATE INDEX hash_index USING HASH ON users (id);
CREATE INDEX btree_index USING BTREE ON users (updated);

我发现查询速度变得很慢,需要几秒钟

查询sql如下。我只使用了第一个索引。

SELECT * FROM users where id=1999;

我通过删除第二个索引解决了这个缓慢的问题updated

我认为第二个索引会导致这个问题。

我只是想知道它是怎么发生的?

标签: mysqltidb

解决方案


  1. 你的 TiDB 版本是多少?
  2. USERS 表中的 id 列是主键。执行计划应该 Point_Get_1。我认为索引应该没有影响。

+-------------+---------+---------+------+-------- --------+------------------------------ ----------------------+---------------+--------+-- ----+ | 编号 | estRows | 行为行 | 任务 | 访问对象 | 执行信息 | 运营商信息 | 记忆 | 磁盘 | +-------------+---------+---------+------+-------- --------+------------------------------ ----------------------+---------------+--------+-- ----+ | Point_Get_1 | 1.00 | 1 | 根 | 表:用户 | 时间:1.302907ms,循环:2,获取:{num_rpc:1,total_time:1.2536ms} | 手柄:10 | 不适用 | 不适用 | +-------------+---------+---------+------+-------- --------+------------------------------ ----------------------+---------------+--------+-- ----+

  1. 我认为您可以检查“解释分析 SELECT * FROM users where id=1999;”。SQL的执行计划是一样的吗?</li>

推荐阅读