2010-11-05 27 views
0

这是一个查询其需要1到2秒执行(MySQL查询)多表连接 - 删除查询 - 最佳的方式

DELETE t1 FROM table1 t1, table2 t2, table3 t3, table4 t4 
WHERE (t1.column1 = t2.column1 OR t1.colum2 = t2.column1) 
AND t2.column1 = t3.column1 
AND t3.column2 = t4.column1 
AND t4.column2=100; 

我期待在几年的毫秒的执行时间。有没有实现这个最佳方式?

回答

0

将索引添加到表中,这将改善删除性能以及查询。

+0

索引已经添加,可能是我应该重新加入联接的方式。 – Sharpeye500 2010-11-05 17:27:07

+0

索引在选择查询中起着重要作用,更多索引会减慢任何更新/删除查询。 – Sharpeye500 2010-11-05 17:27:45

+1

如果索引显着减少必须考虑的记录数量,那么它将彻底改善甚至删除。尝试在选择想要删除的结果的等效查询上执行EXPLAIN,然后也许可以优化索引。如果您正在使用InnoDB或MyISAM,如果它正在快速查询结果,但需要很长时间才能删除,那么切换到MyISAM将改进删除操作,但还有其他缺点。 – 3urdoch 2010-11-05 19:29:15

0

尝试将其分解为两个不同的删除查询并删除“OR”子句。这样的OR子句通常会导致全表扫描。如有必要,使用事务来确保两个查询都被执行,因为它们被分成两部分。

0

优化它的方法是添加索引 - 但很难从查询中知道索引的用处。尝试使用标准的JOIN语法;这将有助于您找出ON子句和WHERE子句之间的区别,以及不同索引可能的帮助。