【发布时间】:2021-12-15 03:40:13
【问题描述】:
我有一个表 TEST 有两列:
- A varchar(250)
- B tinyint(1)
该表有大约 400 万行。 A 包含 UTF8 字符串,B 只能是 0 或 1。
select count(1) from TEST 非常快(截至 MySQL Workbench 0,000 秒),但 select count(1) from TEST where B=1 大约需要 15 秒(在相当快的机器上,但在具有更多列的真实表上,对于这个问题应该无关紧要)。为 B 添加索引没有帮助 - 它仍然进行全表扫描。强制使用索引也无济于事。
存储引擎是 MyISAM,因为选择比插入/更新多得多,这可能是最好的选择。
如何加快查询速度?
【问题讨论】:
-
如果性能受到这种影响,您可以考虑创建两个表:一个包含 b=1 的数据,另一个包含 b=0 的数据
-
要试验的另一件事是您使用的引擎或索引的类型
-
看看这里,如果索引没有帮助:stackoverflow.com/questions/1332624/…
-
InnoDB 和 MyISAM 之间也存在一些差异,后者通常更快但不太可靠。
-
性能差异让我觉得你的表在 MyISAM 存储引擎中。是吗? MyISAM 表会保持持久的行数,因此查询
SELECT COUNT(*)但只有在您的查询没有 WHERE 子句时才会加快速度。
标签: mysql indexing query-optimization