Ho un'app web in cui mostro una serie di post basati su questo schema di tabella (ci sono migliaia di righe come questa e altre colonne (rimosse come non richieste per questa domanda)) : -Come dovrei interrogare questo in mysql
+---------+----------+----------+
| ID | COL1 | COL2 |
+---------+----------+----------+
| 1 | NULL | ---- |
| 2 | --- | NULL |
| 3 | NULL | ---- |
| 4 | --- | NULL |
| 5 | NULL | NULL |
| 6 | --- | NULL |
| 7 | NULL | ---- |
| 8 | --- | NULL |
+---------+----------+----------+
E io uso questa domanda: -
SELECT * from `TABLE` WHERE `COL1` IS NOT NULL AND `COL2` IS NULL ORDER BY `COL1`;
E il set di risultati risultante ottengo è come: -
+---------+----------+----------+
| ID | COL1 | COL2 |
+---------+----------+----------+
| 12 | --- | NULL |
| 1 | --- | NULL |
| 6 | --- | NULL |
| 8 | --- | NULL |
| 11 | --- | NULL |
| 13 | --- | NULL |
| 5 | --- | NULL |
| 9 | --- | NULL |
| 17 | --- | NULL |
| 21 | --- | NULL |
| 23 | --- | NULL |
| 4 | --- | NULL |
| 32 | --- | NULL |
| 58 | --- | NULL |
| 61 | --- | NULL |
| 43 | --- | NULL |
+---------+----------+----------+
Si noti che la colonna ID è mescolata grazie alla clausola order by.
Ho indici adeguati per ottimizzare queste query. Ora lasciami spiegare il vero problema. Ho un tipo di funzionalità pigro nella mia app web. Pertanto, visualizzo circa 10 post per pagina utilizzando uno LIMIT 10
dopo la query per la prima pagina.
Siamo buoni fino a qui. Ma il vero problema arriva quando devo caricare la seconda pagina. Cosa chiedo ora? Non voglio che i post vengano ripetuti. E ci sono nuovi messaggi che arrivano quasi ogni 15 secondi che li fanno andare in cima (per prima cosa intendo letteralmente la prima riga) del set di risultati (non voglio visualizzare questi ultimi post nella seconda o terza pagina ma alterano il dimensione del set di risultati quindi non posso usare LIMIT 10,10
per la seconda pagina e così via in quanto i post verranno ripetuti.).
Ora, tutto quello che so è l'ultimo ID del post che ho visualizzato. Dì 21
qui. Quindi, voglio visualizzare i post degli ID 23,4,32,58,61,43
(fare riferimento alla tabella dei risultati sopra riportata). Ora, carico tutte le righe senza utilizzare la clausola LIMIT
e visualizzo 10 ID che si verificano dopo l'ID 21
. Ma per quello dovrò interagire su migliaia di file inutili. Ma non posso usare una clausola LIMIT
per la 2a, 3a ... pagine di sicuro. Inoltre, gli ID sono confusi, quindi non posso assolutamente usare WHERE ID>...
. Allora, dove andiamo ora?
Dal momento che il 'COL1' è ordinabile, come a ricordare l'ultimo record di' COL1' a ogni richiesta, e in pagina seguente carico 'COL1 DOVE>?'? – Passerby
@Passerby, ci ho già pensato. Ma, 'COL1' ha molte righe identiche. In realtà, 'COL1' è un timestamp e molte righe possono avere lo stesso timestamp (nel mio set di risultati) – user4647309