Mysql 对update/delete sql语句的慢速查询

Mysql 对update/delete sql语句的慢速查询,mysql,query-optimization,sql-update,Mysql,Query Optimization,Sql Update,在mysql中有很多慢查询,只与update和delete语句相关。这些表有2个索引列,但索引不多。每个表平均有30K条记录 请给出您关于如何克服与更新和删除查询相关的查询速度慢的建议。这类查询: DELETE FROM <table2> WHERE ID IN (SELECT ID FROM <table1> WHERE ID2=100); …或: UPDATE <table1> SET <colmun

在mysql中有很多慢查询,只与update和delete语句相关。这些表有2个索引列,但索引不多。每个表平均有30K条记录

请给出您关于如何克服与更新和删除查询相关的查询速度慢的建议。这类查询:

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

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

您的问题只存在于更新和删除上这一事实告诉我,您可能索引太多了

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

首先:使用

下一步:如果数据库具有优化功能->使用它们


最后:考虑不使用类似的DBS,或代替;- 由于表已编制索引,我的第一个建议是使用以下方法更新表的统计信息:

但要注意:

在分析过程中,使用MyISAM、BDB和InnoDB的读锁锁定该表


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

它们是大型索引表吗?您的问题太广泛,无法具体回答。它可以是从查询到连接的任何内容。您是否能够发布查询,以便我们可以更深入地查看它们?这些表有2个索引列,而不是索引严重的表。每个表平均有30K条记录。需要有关特定场景的更多信息。您用于更新或删除的where子句是什么?在where子句中,所涉及的列的属性是什么?表中有多少条记录,索引是什么?从何处删除,从何处删除,从何处选择ID,从何处删除ID2=100;更新集=0,其中id=1001;这类查询。索引不仅仅用于WHERE子句-如果优化器认为合适,SELECT、JOIN和ORDER BY可以利用索引使用。外键不会影响查询速度;它们只约束指定列的数据。Analyze对慢速查询有什么好处?@Karthick:Analyze TABLE将更新统计信息,包括指定表的索引,然后优化器将使用这些索引来决定如何访问并最终使用数据。多谢小马。当我运行anaze table时,我看到的只是这个表->表名Op->分析消息类型->状态消息文本->确定,这将有助于减少慢速查询的开销,慢速查询在特定时间发生–我们如何确定此时发生了什么事情使数据库变得如此缓慢?@karchigh:您需要阅读有关使用MySQL查询评测的内容,以查看是否是由于服务器负载等原因造成的。很抱歉,我允许使用MySQL,我将在以后的数据库选择中添加您的观点。
ANALYZE TABLE table1, table2