选择查询 在小型和大型数据库中使用索引



我有两种不同的情况,在数据库与200行(如此简单)和在DB与200,000,000行(并每天添加更多行),我想选择一个或多个行,所以在这种情况下,哪一个是更好的查询选择?

示例表:

<表类> ID 代码 x_key 组 名称 标题 其他列 tbody><<tr>1aaak32dg1………200zzzgi32g5………

你说' 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,只为它设置条件。

最新更新