mysql - 为什么即使我不使用它,多个索引的查询也会变得很慢
问题描述
我正在使用 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
我认为第二个索引会导致这个问题。
我只是想知道它是怎么发生的?
解决方案
- 你的 TiDB 版本是多少?
- USERS 表中的 id 列是主键。执行计划应该 Point_Get_1。我认为索引应该没有影响。
+-------------+---------+---------+------+-------- --------+------------------------------ ----------------------+---------------+--------+-- ----+ | 编号 | estRows | 行为行 | 任务 | 访问对象 | 执行信息 | 运营商信息 | 记忆 | 磁盘 | +-------------+---------+---------+------+-------- --------+------------------------------ ----------------------+---------------+--------+-- ----+ | Point_Get_1 | 1.00 | 1 | 根 | 表:用户 | 时间:1.302907ms,循环:2,获取:{num_rpc:1,total_time:1.2536ms} | 手柄:10 | 不适用 | 不适用 | +-------------+---------+---------+------+-------- --------+------------------------------ ----------------------+---------------+--------+-- ----+
- 我认为您可以检查“解释分析 SELECT * FROM users where id=1999;”。SQL的执行计划是一样的吗?</li>
推荐阅读
- python - 难以在 python 中创建注释脚本
- python-3.x - 在所有 DataFrame 列中搜索值(第一列除外!)并添加具有匹配列名的新列
- javascript - Javascript ES6 使用回调重用导出
- python-3.x - Selenium:是 setUpClass()、tearDownClass()、@classmethod 装饰器让每个测试共享一个浏览器实例吗?
- angular - 如何减少 ng build --prod 捆绑文件大小
- linkedin - 使用 LinkedIn Ads API 搜索活动组总是返回 400 Bad Request
- c# - PushSharp APNS 通知错误 请求的功能不受支持
- java - 从 java 设置 ulimit -n
- dart - 如何检查 Flutter 上首次加载可用的互联网?
- java - JAVA字典作为参数