【问题标题】:Why does query become very slow with multiple indexes even I don't use it为什么即使我不使用它,多个索引的查询也会变得很慢
【发布时间】:2020-11-13 05:54:42
【问题描述】:

我正在使用 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解决了这个缓慢的问题

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

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

【问题讨论】:

  • 所以重新创建索引会再次减慢查询速度?
  • 另外,鉴于 id 是 PRIMARY KEY,我很难理解 hash_index 的意义

标签: mysql tidb


【解决方案1】:
  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的执行计划是一样的吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多