I need to reset the table flag 'A' from 'X' to 'Y' , where the update_date of the row satisfies the conditions 1. update_date > 1 month, 2. flag = 'X' & 3. type = 1 .
And update_date is checked on another table 'B' . I hope the following query will explain exactly what I need. Also this query is great for me. But the problem is that it takes too much time. In fact, my A & B tables are much larger, almost contain billions of rows, and there are about 10 of them.
When I run my extra query to select A.id , I got the result immediately.
SELECT a.id FROM A a JOIN B b ON (a.id = b.id AND a.name = b.name AND a.type = 1 AND a.flag = 'X' AND a.update_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) tmp_table)
But only an update request, even if I put a restriction, also takes a lot of time.
UPDATE A SET flag='Y' WHERE id IN (SELECT a.id FROM A a JOIN B b ON (a.id = b.id AND a.name = b.name AND a.type = 1 AND a.flag = 'X' AND a.update_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) tmp_table)) LIMIT 100
I am looking for alternative solutions to my request that make it fast. Hope I can write a stored procedure for it. But in SP do I need to scroll for each target_ids right?
I do not want to write two separate requests in PHP, as there are many threads of my PHP scripts running on cron that return the same results (delay time).
It should also be noted that indexing is sufficient for columns.
The desire to update the limits on the limit. those. update 1000+ entries for each run.
source share