|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
30.11.2010, 16:30 | #1 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
оптимизировать запрос (индекс + LIKE)
Есть таблица, там несколько млн строк, есть индекс на поле birth_date, само поле типа DATE хранит данные в виде 1987-05-23.
Нужно сделать выборку всех пользователей у которых день рождения сегодня. На данный момент запрос выглядит так: PHP код:
PHP код:
Подскажите в данном случае можно ли как-то реализовать выборку по быстрее? Решение типа создать отдельно поля для записи месяца и дня рождения не проходят, так как это затронет весь проэкт, и придется вносить очень очень много изменений. Предпочтительно ничего не менять, кроме запроса на выборку. |
30.11.2010, 16:41 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Попробуй что-то:
Код:
I'm learning to live...
|
30.11.2010, 16:46 | #3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Like - это нечёткий поиск, поэтому, обычно, индекс либо совсем не используется, либо используется частично (малоэффективно)..
Вы не написали, какая у Вас СУБД. Но, в любой нормальной современной СУБД есть поле Date (или DateTime, или Дата или ДатаВремя и т.д.) и дату рождения надо хранить именно в формате Date (DateTime ). Потому что в СУБД есть функции, получения даты, месяца, года из переменных такого типа. Это и само по себе будет быстрее, чем LIKE + при необходимости по ним тоже можно индексировать. либо банально разделите поле на три разных поля. Постройте по ним индекс. и всё будет "летать"! |
30.11.2010, 17:02 | #4 |
Форумчанин
Регистрация: 04.01.2009
Сообщений: 188
|
MYSQL 5.x у меня
|
01.12.2010, 09:34 | #5 |
Пользователь
Регистрация: 13.10.2010
Сообщений: 96
|
В Oracle можно строить индекс, используя не само поле, а функцию от него (не разбивая на несколько полей), например
to_char(birth_date,'mm.dd') - это месяц и день (я так понимаю, требуется дата без года). Скорее всего в MYSQL есть что-то подобное Только в вызове использовать не само поле, а функцию от него, как в индексе
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (Стив Макконнелл)
Последний раз редактировалось BeJIuKuu_Hexo4yxa; 01.12.2010 в 09:36. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Оптимизировать sql запрос | Hottabych | SQL, базы данных | 0 | 02.06.2010 00:16 |
Индекс числа | VenomMag55 | Помощь студентам | 2 | 09.02.2010 16:09 |
Индекс в дочерней таблице | VistaSV30 | Microsoft Office Access | 3 | 13.01.2010 11:58 |
Индекс не срабатывает | GenniY | БД в Delphi | 4 | 24.11.2009 15:05 |
Как оптимизировать запрос MySQL с выборкой из двух таблиц. | Johnatan | SQL, базы данных | 6 | 13.04.2008 03:10 |