Domanda

Ho un problema con questa query, la complessità di questa query non è buona, io uso questa query da lungo tempo, e ora questo database sono presenti molte righe per ottenere la selezione con questo metodo.Tutti gli indici es è aggiunto correttamente.Io alla ricerca di qualche altro metodo per ottimizzare la query dalla data comparsion perché questo è il collo di bottiglia in questa soluzione.

SELECT (...) FROM table 
WHERE (YEAR(row_add_date) * 10000 + 
       MONTH(row_add_date) * 100 + 
       DAYOFMONTH(row_add_date)) >= (var_0 * 10000 + var_1 * 100 + var_2) and
      (YEAR(row_add_date) * 10000 + 
       MONTH(row_add_date) * 100 + 
       DAYOFMONTH(row_add_date)) <= (var_3 * 10000 + var_4 * 100 + var_5) 

Qualcuno mi può aiutare?Saluti

È stato utile?

Soluzione

Io suggerirei utilizzando built-in confronti data mysql.

row_add_date <= '20101027' and row_add_date >= '20101027'

Ma si noti che questa è una strana prova, in primo luogo: non sono solo test che la data è pari al 27 ottobre, in questo modo:

row_add_date = '20101027'

Altri suggerimenti

Perché la rottura oltre la data di simile?Ogni riga funzioni non scala bene.Mi sembra che la data per intero la sezione alla fine può essere sostituito da:

where row_add_date = '2010-10-27'

Anche se si desidera un intervallo, si sta ancora meglio, utilizzando il date così come sono.


Basato su modifiche di stato che si sta utilizzando variabili, si dovrebbe fare il calcolo sul lato destro delle condizioni.Perché questo sarà fatto una volta prima dell'inizio di query.Con quello che hai, il calcolo sul lato sinistro verrà effettuata una volta per ogni riga, un vero e prestazioni killer.

ho intenzione di indovinare che row_add_date è di tipo datetime. Se è così, è necessario trasformare 20.101.027 in un datetime, e confrontare la colonna a questo.

In altre parole:

row_add_date >= firstDateTime and row_add_date <= secondDateTime
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top