I have a huge database around ~20,000,000, presently I am running a php script, which verifies if user info is 'valid or invalid'. There are several entries named 'invalid' in the database. Problem is how to make a limit on database to scan only valid entries. I am running google cloud to device messaging service which only allows push messages to 200,000 users per day. So, I want to make limit per query and automate via cron.
Presently query which is running on database is
for valid:
SELECT * FROM TNAME WHERE SETNO=1 & flag='valid' ORDER BY id;
for invalid:
SELECT * FROM TNAME WHERE SETNO=1 & flag='invalid' ORDER BY id;
Different numbers are assigned to setno corresponding to database rows.
Best Answer
From your question, let's assume your table is called TNAME
You should collect the ids that are valid
First create a table to hold IDs and a process status per ID
Next, preload load all new IDs
This will load ids that are valid. IDs that were already loaded are bypassed
Using this idlist, pickup the first 200,000 ids
Process the 200K rows with an INNER JOIN with queries like this:
When done processing, mark the IDs as processed:
All you have to do from here is automate all these steps, except the initial table creation
Give it a Try !!!