|
Тема |
Re: ех Dakota.... [re: Dakota] |
|
Автор |
salle (новак) |
|
Публикувано | 05.02.03 05:31 |
|
|
А защо реши, че забива?
WHERE DATE_FORMAT(s.datetime, '%Y-%m-%d')!=CURDATE()
това кактоси го написал винаги ще преравя всички редове от таблицата независимо дали има индекс или не - причините са точно 2. Едната можеш да я избегнеш (функция върху колонка от таблицата), но другата не можеш: !=
!= е изключително гадно нещо за базите данни и ако искаш да го оптимизираш трябва (естествено след като добавиш индекс по тази колонка) да използваш
select ...
where d < cudate()
union
select ...
where d > curdate()
Само, че в случаю ти си направо за бой поради что-то таблицити ти се казват visitor и search_stat се хващам на бас на 2 каси бира, че нямаш НИТО ЕДИН РЕД дата > днес! И няма и да имаш.
така ли е?
Ако е така МАРШ да добавяш индекс:
ALTER TABLE search_stat ADD KEY(datetime);
.... WHERE `datetime` < CURDATE();
ще ти даде същото - така ли е?
Хващам се на бас, че EXPLAIN ше покаже по-различна история.
Друг е въпроса, че това сигурно няма да ти помогне ако пазиш данни за много време назад.
Задължително обаче - на всяка цена добави в search_stat индекс KEY(visitor_sid)
Колонките по които правиш JOIN трабва да са индексирани - в 99.99% от случаите това ускорява многократно работата.
Нередното в резултата от EXPLAIN не е числото 112347 а всичко останало
Особено първата колонка - ALL
|
| |
|
|
|