[英]MYSQL query execution time
我有一个问题问你。 我的数据库有250.000条记录,其中2个文本字段最多包含300个单词。 我想选择所有符合某些条件的数据,然后将其放在另一个表中。 我想删除这些不符合我的条件的录音:
DELETE FROM `cables` WHERE
`data` NOT LIKE "%BRV%" AND
`data` NOT LIKE "%Venezuela%" AND
`data` NOT LIKE "%Caracas%" AND
`data` NOT LIKE "%Hugo Chavez%" AND
`tags` NOT LIKE "%BRV%" AND
`tags` NOT LIKE "%Venezuela%" AND
`tags` NOT LIKE "%Caracas%" AND
`tags` NOT LIKE "%Hugo Chavez%" AND
`header` NOT LIKE "%BRV%" AND
`header` NOT LIKE "%Venezuela%" AND
`header` NOT LIKE "%Caracas%" AND
`header` NOT LIKE "%Hugo Chavez%" AND
`subject` NOT LIKE "%BRV%" AND
`subject` NOT LIKE "%Venezuela%" AND
`subject` NOT LIKE "%Caracas%" AND
`subject` NOT LIKE "%Hugo Chavez%" AND
`tmp` NOT LIKE "%BRV%" AND
`tmp` NOT LIKE "%Venezuela%" AND
`tmp` NOT LIKE "%Caracas%" AND
`tmp` NOT LIKE "%Hugo Chavez%" AND
`identifier` NOT LIKE "%BRV%" AND
`identifier` NOT LIKE "%Venezuela%" AND
`identifier` NOT LIKE "%Caracas%" AND
`identifier` NOT LIKE "%Hugo Chavez%"
如果每一行至少包含这些单词中的任何一个,则可以。 事实是,自执行以来,我已经有3个小时了,什么也没发生。 我已经停止了该过程,但没有任何反应。 最终结果应该有大约14000张录音,我该怎么办? 谢谢!!!!
什么都没发生,因为您停止了它。 因此, commit;
尚未完成。
您应该拆分查询以缩短执行时间。
NOT LIKE %%
非常非常昂贵!!! (索引,如果有一些未使用...)
尝试REGEXP
,在这里可能会更好。
DELETE FROM `cables` WHERE
`data` NOT REGEXP 'BRV|Venezuela|Caracas|Hugo Chavez' AND
`tags` NOT REGEXP 'BRV|Venezuela|Caracas|Hugo Chavez' AND
`header` NOT REGEXP 'BRV|Venezuela|Caracas|Hugo Chavez' AND
`subject` NOT REGEXP 'BRV|Venezuela|Caracas|Hugo Chavez' AND
`tmp` NOT REGEXP 'BRV|Venezuela|Caracas|Hugo Chavez' AND
`identifier` NOT REGEXP 'BRV|Venezuela|Caracas|Hugo Chavez'
也可以串联使用(Karolis的建议)
DELETE FROM `cables` WHERE
CONCAT( `data`, `tags`, `header`, `subject`, `tmp`, `identifier` )
NOT REGEXP 'BRV|Venezuela|Caracas|Hugo Chavez'
问题在于, LIKE %text%
将不会使用全文索引。 因此,包含250.000个条目和很多LIKE %%
标准的大型表将花费很长时间。
您确定需要前导的“%...”吗? 否则,您可以尝试使用布尔搜索修饰符 。
为什么不反转条件以选择匹配的记录,而不是删除不匹配的记录? 然后将它们插入另一个表? 这可能会更快一些,因为即使过度使用非常规条件也要3个小时,对于250'000行来说太长了。
INSER INTO `selected_cables`
SELECT * FROM `cables`
WHERE NOT (
`data` NOT LIKE "%BRV%" AND
`data` NOT LIKE "%Venezuela%" AND
`data` NOT LIKE "%Caracas%" AND
`data` NOT LIKE "%Hugo Chavez%" AND
`tags` NOT LIKE "%BRV%" AND
`tags` NOT LIKE "%Venezuela%" AND
`tags` NOT LIKE "%Caracas%" AND
`tags` NOT LIKE "%Hugo Chavez%" AND
`header` NOT LIKE "%BRV%" AND
`header` NOT LIKE "%Venezuela%" AND
`header` NOT LIKE "%Caracas%" AND
`header` NOT LIKE "%Hugo Chavez%" AND
`subject` NOT LIKE "%BRV%" AND
`subject` NOT LIKE "%Venezuela%" AND
`subject` NOT LIKE "%Caracas%" AND
`subject` NOT LIKE "%Hugo Chavez%" AND
`tmp` NOT LIKE "%BRV%" AND
`tmp` NOT LIKE "%Venezuela%" AND
`tmp` NOT LIKE "%Caracas%" AND
`tmp` NOT LIKE "%Hugo Chavez%" AND
`identifier` NOT LIKE "%BRV%" AND
`identifier` NOT LIKE "%Venezuela%" AND
`identifier` NOT LIKE "%Caracas%" AND
`identifier` NOT LIKE "%Hugo Chavez%")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.