Ho una tabella DB MySQL con più campi di tipo data. Devo fare diverse query SELECT su questo tavolo ma non sono sicuro di quale sia il modo migliore per trovare i record dello stesso mese.Query SELEZIONA efficiente per trovare i record entro un mese
so di poter effettuare le seguenti operazioni:
SELECT *
FROM table
WHERE MONTH(somedate) = 5
AND YEAR(somedate) = 2015
Ma Continuo a leggere che non è efficiente e che avrei dovuto andare con l'utilizzo di date effettive, cioè
SELECT *
FROM table
WHERE somedate BETWEEN '2015-05-01' AND '2015-05-31'
Tuttavia, tutto quello che ho sarebbe il mese e l'anno come variabili provenienti da PHP. Come faccio a calcolare facilmente e velocemente l'ultimo giorno del mese se vado con la seconda opzione?
Sto trovando "tra" per essere più lento di "mese/anno", e "mi piace", sul mio db. Mese/anno = 'Visualizza le righe da 0 a 29 (77 totali, Query ha impiegato 0,0825 sec)'. Tra = = Visualizzazione delle righe 0 - 29 (77 totali, Query ha richiesto 0,1059 sec) '. Mi piace = 'Mostra le righe 0 - 29 (77 totali, Query ha impiegato 0.0815 sec)'. Questo è su una tabella di fila 7k. Questo thread punta nell'altra direzione però. http://dba.stackexchange.com/questions/96245/mysql-date-field-filter-by-like-vs-month – chris85
MySQL può fare un uso efficace di un indice con la colonna principale di 'somedate'. Se non hai un indice del genere, puoi crearne uno, ad es. 'CREATE INDEX ON table (somedate)'. Finché la query restituisce meno del 10% delle righe nella tabella, l'indice renderà la query molto più veloce. Con le funzioni racchiuse nella colonna somedate, MySQL deve valutare quelle funzioni su ogni riga della tabella. – spencer7593
Utilizzare 'EXPLAIN' per vedere il piano di esecuzione. Per i confronti delle prestazioni, assicurarsi che i risultati della query non vengano restituiti dalla cache della query. Ci sono diversi modi per farlo, ad esempio, hit "SQL_NO_CACHE", includere la variabile definita dall'utente nella query, disabilitare la cache delle query, ecc. (In realtà i nostri server MySQL sono configurati per memorizzare solo * query * che includono l'hint 'SQL_CACHE' , quindi controlliamo quali query possono essere memorizzate nella cache e impediamo che i risultati vengano eliminati dalle query che non abbiamo bisogno di memorizzare nella cache.) – spencer7593