php - 优化查询

标签 php mysql sql loops

我有大约 70 000 行的表格。我需要查找、更改和保存 6000 行(我必须经常这样做,每周几次)。目前,我是这样做的,完成时间超过 2 分钟:(有什么建议吗?:( )

  $query = mysql_query("SELECT meta_value FROM my_table WHERE meta_key = 'key' AND meta_value LIKE '%something%'")or die(mysql_error());

  $new = "soemthing something";

  while($row = mysql_fetch_array($query)){

    $old = unserialize($row['meta_value']);
    $new_meta_r = str_replace($old['color'],$new,$old);
    $new_meta = serialize($new_meta_r);

    $update_meta = mysql_query("UPDATE my_table SET meta_value = '$new_meta' WHERE meta_key = 'key' AND meta_value LIKE '%something%'")or die(mysql_error());
  }

最佳答案

以下是一些有助于优化的方法:

  • 尝试获取除 meta_value 之外的 ID,并在使用更新时仅引用 ID。
  • 检查您是否真的需要使用整个通配符,或者您可以将其添加到后缀或前缀中。

含义:

#Full wildcard  

 SELECT * FROM TABLE WHERE COLUMN LIKE '%something%';  

#Postfix wildcard  

 SELECT * FROM TABLE WHERE COLUMN LIKE  'something%';  

 #Prefix wildcard  

SELECT * FROM TABLE WHERE COLUMN LIKE  '%something'; 
  • 确保您使用了正确的数据类型,varchars 的大小正确,使用 int 而不是 BigInt 等。
  • 尝试将查询移动到存储过程,编译存储过程(SQL 代码不是),使它们比 SQL 代码更快。

关于php - 优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10997415/

相关文章:

sql - oracle distinct 做排序

php - PDO 可以在本地连接到 MySQL,但不能连接到远程,即使它们是同一台服务器

php - 工厂方法的建议

php - mysql - 在所有日期出现的日期之间搜索

mysql:涉及日历表的RIGHT JOIN查询速度问题

sql - 在 Postgres 中返回 SETOF 表的函数

sql - 如何从时间戳字段 < now()-44 分钟的表中删除记录?

php - 无法将 php 连接到 mysql

php - 去掉mysql中的撇号?

mysql - innoDB Mysql 可用磁盘空间