已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以用事实与引用来回答.
2天前关闭。
Improve this question
我有两种不同的情况,在smallDB中有200行(如此简单),在largeDB中有2,000,000,000行(每天添加更多行),我想选择一行或多行,在这种情况下,哪一种是更好的选择查询?
示例表:
| 识别码|代码|x键|组群|姓名|标题|其他列|
| - -|- -|- -|- -|- -|- -|- -|
| 一个|AA公司|AK 32 d型|g1级|一个人。|一个人。|一个人。|
| 二百|zz| zgi32|五代|一个人。|一个人。|一个人。|
ID:主要代码:索引(非复合索引)x_Key:指数(非综合指数)组:例如G5组中20%的行
例如,对于小型和大型数据库,这是同一个表,哪个QUERY更适合选择一行或多行?(问号表示我将搜索值放在查询中)
在小型数据库中,需要一行:
SELECT name,title FROM table WHERE code=?
SELECT name,title FROM table WHERE code=? AND x_key=?
SELECT name,title FROM table WHERE code=? AND x_key=? AND group=?
SELECT name,title FROM table WHERE code=? LIMIT 1
SELECT name,title FROM table WHERE code=? AND x_key=? LIMIT 1
SELECT name,title FROM table WHERE code=? AND x_key=? AND group=? LIMIT 1
在小型数据库中,需要多行:
SELECT name,title FROM table WHERE group=?
SELECT name,title FROM table WHERE group=? AND name LIKE `%test`
&&
在大型数据库中,需要一行:
SELECT name,title FROM table WHERE code=?
SELECT name,title FROM table WHERE code=? AND x_key=?
SELECT name,title FROM table WHERE code=? AND x_key=? AND group=?
SELECT name,title FROM table WHERE code=? LIMIT 1
SELECT name,title FROM table WHERE code=? AND x_key=? LIMIT 1
SELECT name,title FROM table WHERE code=? AND x_key=? AND group=? LIMIT 1
在大型数据库中,需要多行:
SELECT name,title FROM table WHERE group=?
SELECT name,title FROM table WHERE group=? AND name LIKE `%test`
在小型和大型中,哪一个更适合SELECT,甚至UPDATE?
2条答案
按热度按时间zaqlnxep1#
你说“需要一行”--你的意思是“只返回一行”吗?还是“我只需要其中一行,任何一行都足够了”?还是“我只需要按某种顺序的第一行”?
拥有这两个“复合”索引将有助于您提到的所有查询。
如果这两个组合中有一个是唯一的,则考虑将其设为
PRIMARY KEY
并去掉ID
。这将进一步加快某些查询的速度。您是在暗示code
,* 本身 * 就是UNIQUE
。在这种情况下,去掉ID
并只使用特别是,我之前的3列建议不值得拥有。
在209行的测试用例中,您可能很难衡量任何改进,但是更大的表(甚至是2B行的表)将从中受益。
单行索引也可以是DROP。
如果只有一行,则
LIMIT 1
是无用;如果有多行,请注意,如果没有ORDER BY
,您将得到优化器想要给您的任何一行。添加一个
ORDER BY
需要重新开始索引设计。以上所有这些也适用于
UPDATE
。但是,如果您需要一次更新几百行以上的行,则会出现其他问题。hi3rlvi22#
首先,使用
LIMIT 1
语句/部分的查询速度更快。但不要忘记
ORDER BY
,否则MySQL将选择返回哪个子集(如注解中所述)。查询的其余部分的速度取决于哪些列被配置为索引。
如果所有的查询都被索引(或者至少是那些被访问的查询),那么使用PHP进行过滤的速度会更慢,因此使用大多数条件的查询速度会更快。
但是如果
code
列为unique
,则不检查其余列的速度最快:您可以这样想,如果任何列是
unique
,则仅为该列设置条件。