在mysql中有很多慢查询,只与更新和删除语句有关。这些表有2个索引列,而不是重度索引表。每张表平均有30K记录。
请提供有关如何克服与更新和删除查询相关的慢查询的建议。这类查询:
DELETE FROM <table2>
WHERE ID IN (SELECT ID
FROM <table1> WHERE ID2=100);
...或:
UPDATE <table1>
SET <colmunname>=0
WHERE id=1001;
答案 0 :(得分:2)
由于表已被编入索引,我的第一个建议是使用ANALYZE TABLE更新表的统计信息:
ANALYZE TABLE table1, table2
但要注意:
在分析过程中,表格被锁定为MyISAM,BDB和InnoDB的读锁定。
答案 1 :(得分:1)
您的问题仅存在于更新和删除的事实告诉我您可能索引太多了。
索引将大大减少某些查询所花费的时间,但在插入,更新和删除表中的条目时需要额外的工作。尝试消除经常更新的列上的索引,特别是如果它们不经常出现在SQL查询的where
子句中。
答案 2 :(得分:0)
管理索引和外键关系都会在更新和删除操作期间产生开销。我将在开发服务器上恢复您的prod数据库的副本,删除所有外键约束,并且都期望您的主键索引并查看性能差异。然后,您可以添加回索引,直到您的应用程序具有更好的性能平衡。
答案 3 :(得分:-1)