【发布时间】:2022-01-08 22:24:50
【问题描述】:
我有下表:
CREATE TABLE `FooBar` (
`id` int,
`foo` int,
`bar1` int,
`bar2` int,
PRIMARY KEY (`id`),
KEY `foobar1` (`foo`, `bar1`),
KEY `foobar2` (`foo`, `bar2`)
) ENGINE=InnoDB;
现在我有以下选择查询:
select * from FooBar where foo=1 and (bar1=2 or bar2=2);
另外两个连续的选择
select * from FooBar where foo=1 and bar1=2;
select * from FooBar where foo=1 and bar2=2;
与两次连续选择的总时间相比,带有“或”的单次选择的时间会明显更快、更慢或大致相同吗?
【问题讨论】:
-
我可以建议你测试一下看看
-
我目前没有设置测试环境来测试大量数据以发现差异,并且 MySQL 的行为对于小数据集非常随机。
-
是的,测试这是要走的路。请记住,执行两个查询可能会导致大量重复项,然后您可能必须删除这些重复项。这在很大程度上取决于数据,因此最好使用一些真实数据而不是 'foo' 和 'bar'。
-
问题是我没有足够的数据来获得合适的测试环境。在一个大约有 20 行的小数据集中,我得到的“解释”显示没有任何键用于“或”的情况,我很确定当有足够的数据时不会出现这种情况。
-
“解释”只能告诉你这么多,最后是执行时间和资源使用,你可以在实践中实现,这才是相关的。看到这两个选项就好了,以后有真实数据的时候可以试试。基本上我们无法回答这样的假设性问题。答案可能取决于很多很多因素。
标签: mysql select indexing query-optimization