我有两种不同的情况,在小数据库与200行(如此简单)和在大DB与200,000,000行(并每天添加更多行),我想选择一个或多个行,所以在这种情况下,哪一个是更好的查询选择?
示例表:
你说' One Row need ';——你的意思是"只返回一行"吗?还是"我只需要其中一行,任何一行都可以"?还是"我只需要按某种顺序排列第一行"?
拥有这两个"复合"索引将有助于您提到的所有查询。
INDEX(code, x_key, group)
INDEX(group, name)
如果这两个组合中的任何一个是唯一的,那么考虑使其成为PRIMARY KEY
并去掉ID
。这将加快一些查询的速度。您的意思是code
,本身是UNIQUE
。在这种情况下,去掉ID
,只有
PRIMARY KEY(code),
INDEX(group, name)
特别是,我之前的三栏建议不值得采纳。
您可能在测量209行测试用例中的任何改进时遇到困难,但是更大的,甚至是2b行的表将受益。
单行索引也可以被drop。
如果只有一行,LIMIT 1
是没有用的;除非你不确定,否则不要勾选。如果有多行,请注意,如果没有ORDER BY
,您将得到优化器想给您的任何一行。
添加ORDER BY
需要回到画板上进行索引设计。其中大部分内容都在我的索引烹饪书
以上所有内容也适用于UPDATE
。但是,如果您需要一次更新几百行以上,就会出现其他问题。
首先,LIMIT 1
语句/部分的查询速度更快。
但不要忘记
ORDER BY
,否则MySQL将选择返回哪个子集(如注释中所述)。
查询其余部分的速度取决于哪些列被配置为索引。
如果所有的都被索引(或者至少是那些被访问的),那么知道用PHP过滤是比较慢的,因此大多数条件下的查询将是最快的。
如果code
列是unique
,那么不检查其余列将是最快的:
SELECT name, title FROM table WHERE code=?
你明白了,如果你的任何列是
unique
,只为它设置条件。