我正在尝试使用以下查询来更新我的功能强大的数据库(近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小时内仅可管理约3万个查询。至少可以这么说,这很慢!
有什么办法可以改善这段效率低下的代码吗?
尝试收集您正在寻找和使用的一堆价值观
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)
假设您要查找的数据ID为data ='a','b'或'c'的行,您可以通过以下三种方式进行操作:
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(从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)选择... 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来应用所需的更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句