慢查询更新/删除sql语句

时间:2010-07-06 20:02:17

标签: mysql query-optimization sql-update

在mysql中有很多慢查询,只与更新和删除语句有关。这些表有2个索引列,而不是重度索引表。每张表平均有30K记录。

请提供有关如何克服与更新和删除查询相关的慢查询的建议。这类查询:

DELETE FROM <table2> 
 WHERE ID IN (SELECT ID 
                FROM <table1> WHERE ID2=100); 

...或:

UPDATE <table1> 
   SET <colmunname>=0 
 WHERE id=1001; 

4 个答案:

答案 0 :(得分:2)

由于表已被编入索引,我的第一个建议是使用ANALYZE TABLE更新表的统计信息:

ANALYZE TABLE table1, table2

但要注意:

  

在分析过程中,表格被锁定为MyISAM,BDB和InnoDB的读锁定。

答案 1 :(得分:1)

您的问题仅存在于更新和删除的事实告诉我您可能索引太多了。

索引将大大减少某些查询所花费的时间,但在插入,更新和删除表中的条目时需要额外的工作。尝试消除经常更新的列上的索引,特别是如果它们不经常出现在SQL查询的where子句中。

答案 2 :(得分:0)

管理索引和外键关系都会在更新和删除操作期间产生开销。我将在开发服务器上恢复您的prod数据库的副本,删除所有外键约束,并且都期望您的主键索引并查看性能差异。然后,您可以添加回索引,直到您的应用程序具有更好的性能平衡。

答案 3 :(得分:-1)

首先:使用stored procedures

下一步:如果您的数据库具有优化功能 - &gt;使用它们。

最后:考虑使用非关系型dbs,例如CouchDBCassandra; - )