SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.08.2008 19:20:38

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Индекс по DATE(`datetime`)

Есть поле `datetime` типа DATETIME.

В запросах учавствуют ещё несколько полей:

WHERE `field1` AND DATE(`datetime`)
WHERE `field1` AND DATE(`datetime`) AND `field2`

Можно было бы использовать индекс (`field1`,`field2`,`datetime`), если бы не поле `field2`, которое учавствует не во всех запросах. В середину индекса DATETIME ставить смысла нет. По префиксу DATETIME индекс создавать тоже вроде нельзя.

Вопрос: как создать индекс по этим полям, чтобы он учитывал имено дату, но не время? Пока в голове только один вариант - разбить DATETIME на DATE и TIME.

Неактивен

 

#2 27.08.2008 19:45:13

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Индекс по DATE(`datetime`)

Насколько я понимаю, WHERE DATE (field) никогда не будет использовать индекс, как бы Вы не
старались. Соответственно, не важно, куда его поместить.

В случае, когда у Вас поле datetime - индекс на (field1, field2) - это максимум, который Вы можете
сделать. Разбивка поля, возможно, поможет частично, все зависит от количества вытягиваемых
записей.

Кстати, если использовать не DATE(dt) = ..., а dt BETWEEN .. AND .., то индекс будет использоваться,
но как последний, разумеется. Т.е. Тогда, возможно, Вас спасут два индекса (f1, dt) + (f1, f2, dt).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson