gpt4 book ai didi

php - 使用大型 mysql 数据库改进查询 UPDATE

转载 作者:行者123 更新时间:2023-11-29 13:07:23 25 4
gpt4 key购买 nike

我正在尝试使用以下查询更新我相当强大的数据库(近 300 万行):

$length = strlen($this);

$query = "UPDATE database
SET row_to_update='1'
WHERE row='{$this}'
AND row_length='{$length}'
LIMIT 1";

它从文件(相当多)中获取单词($this),然后搜索匹配项。如果找到,它将用值 1 更新 row_to_update(默认设置为 none)。

每个 row_length 都包含某个单元格的长度值,我认为这可能会显着加快处理速度。遗憾的是没有。

它在 8 小时内仅管理约 30k 查询。至少可以说,这很慢!

有什么办法可以改进这段低效的代码吗?

最佳答案

尝试收集一堆您正在寻找和使用的值

UPDATE table SET row_to_update='1' WHERE row IN ({$my_values});

您可以使用EXPLAIN <your_query>EXPLAIN EXTENDED ..检查它是否使用索引并调整查询或创建索引以加快速度。玩SELECT与相同的WHERE条件就是这样。

您可以使用更多:

SET profiling = 1;
<your query goes here>
SHOW PROFILES;
SHOW PROFILE FOR QUERY 1;

如果它不在开发中,请小心。环境

还考虑用您感兴趣的值填充临时表并以这种方式使用它:

UPDATE table SET row_to_update='1' WHERE row in (SELECT values FROM my_temp_table);

当你到达那里时,你可以将其改进为:

UPDATE table INNER JOIN temp_table ON table.row = temp_table.row SET row_to_update = '1';

示例:

正如您所要求的示例。最后说example表代表您的原始表,其中包含大量数据。在此示例中,我将仅使用 4 行:

mysql> select * from example;
+----+------+
| id | data |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
+----+------+
4 rows in set (0.00 sec)

假设您正在查找包含 data= 'a'、'b' 或 'c' 的行的 id您可以通过 3 种方式做到这一点:

1) SELECT ... IN(列表)

mysql> select id from example where data in ('a', 'b', 'c');
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set (0.00 sec)

2) SELECT ... IN (SELECT ... FROM temp_table)

mysql> select * from temp_table;
+----+------+
| id | data |
+----+------+
| 10 | foo~ |
| 11 | a |
| 12 | bar |
| 13 | baz |
| 14 | b |
| 15 | c |
+----+------+
6 rows in set (0.00 sec)

mysql> select id from example where data in (SELECT data from temp_table);
[..]
3 rows in set (0.00 sec)

3) SELECT ... INNER JOIN temp_table ...

mysql> select example.id from example inner join temp_table on example.data = temp_table.data;
[..]
3 rows in set (0.01 sec)

当您准备好时,使用具有相同条件的 UPDATE 来应用您喜欢的更改。

关于php - 使用大型 mysql 数据库改进查询 UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22521380/

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