gpt4 book ai didi

MySQL - 更新主 "id"列是否会改进连续搜索?怎么做?

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:44 25 4
gpt4 key购买 nike

我有一个 MySQL 表,类似于:

table 1

row_id | val1 | val2 | ...
---------------------------------
0 | ... | ... | ...
1 | ... | ... | ...
2 | ... | ... | ...
3 | ... | ... | ...

等等。

row_id 列是:

primary key
not-null
auto increment

相同的值可以出现在 val1val2 的多行中。例如:

row_id  |  val1  |  val2  |  ...
---------------------------------
0 | 'one' | 'aaa' | ...
1 | 'one' | 'bbb' | ...
... | ... | ... | ...
400 | 'one' | 'ccc' | ...
401 | 'one' | 'ddd' | ...
... | ... | ... | ...

最常见的查询之一是:

SELECT row_id, val1, val2, etc... 
WHERE val1=? AND val2=?
ORDER BY row_id DESC LIMIT 1

表格可能会变得很长。在上面的例子中,row_id=400 行后面可能有 1M 行,或者更多。数量不多,但足够了。

为了帮助提高搜索效率,我想将 row_id 值更改为下一个可用的 id,以便它更接近表的末尾(因此,更接近搜索的开始)。像这样的东西:

UPDATE table1 SET r_id=(next_available_...), val3=?, val4=?, etc... 
WHERE val1=? AND val2=?
ORDER BY r_id DESC LIMIT 1

例如,在上述情况下,如果下一个可用的 row_id22,362,而我的 UPDATEval1='one'val2='ddd',结果将是:

row_id  |  val1  |  val2  |  ...
---------------------------------
0 | 'one' | 'aaa' | ...
1 | 'one' | 'bbb' | ...
... | ... | ... | ...
400 | 'one' | 'ccc' | ...
... | ... | ... | ...
22,362 | 'one' | 'ddd' | ...
... | ... | ... | ...

但是!也许我不需要?

在大多数情况下,该表只有数百或数千个条目。没什么大不了。在一些异常情况下,它可能是数百万。对于这些表,性能上的差异是否证明 提高 row_id 是合理的?我会尽力在 index 中包含 val1val2 ,但事情不可能总是彩虹和冰淇淋。

如何自动更新 row_id 值?或者,我什至需要这样做吗?

注意:这是一个 InnoDB 表,可能可能同时进行数千个来自不同用户的操作 - INSERTUPDATESELECT 等。当前使用 PHP PDO 操作处理操作。

最佳答案

我认为您过度考虑(或可能误解)主键索引 - 只要它是一个自动递增的整数,那应该没问题,无论彩虹和冰淇淋如何,您的最佳 yield 将是优化您正在搜索的列的索引(val1 和 val2)。如果这样做不行,您可能需要重新考虑数据模型。

关于MySQL - 更新主 "id"列是否会改进连续搜索?怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38167305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com