совершенно верно. есть какие-нибудь варианты, как все-таки с индексами запрос сделать?Автор оригинала: walrus
в мануале к составным индексам написано, что как раз в конструкции с OR индексы не используются
если обращений мало, то не много. но когда параллельно идет куча запросов, то просмотр 90тыс строк уже очень чувствуется.Автор оригинала: walrus
сделай через UNION, тогда индексы должны заработать
сор, фигню сначала про интерсект написал
Vsevolod
А сколько времени уходит на выборку?
не уверен, но по работе EXPLAIN mysql может выбирать из нескольких индексов, но использовать будет только один. Для этого как раз и составные индексы используются. Если не прав, то поправьте.Автор оригинала: Vsevolod
если обращений мало, то не много. но когда параллельно идет куча запросов, то просмотр 90тыс строк уже очень чувствуется.
-~{}~ 05.04.07 17:24:
а в mysql 5.0 в where уже можно использовать несколько несоставных ключей. верно?
стало быстрее... сейчас выполняется примерно также как запрос без union в котором индексы не используются. почему - непонятно. странно, конечно.Автор оригинала: algo
Иначе говоря, попробуй UNION ALL
в m4 насколько я понимаю данные из составных индексов используются в порядке их указания в индексе. т.е. если там индекс для n1, n2 то при запросе where n2 like '...' индекс использоваться не будет, а при запросе where n1 like '...' and n2 like '...' будет.Автор оригинала: walrus
не уверен, но по работе EXPLAIN mysql может выбирать из нескольких индексов, но использовать будет только один. Для этого как раз и составные индексы используются. Если не прав, то поправьте.
Похоже, что в версиях 5.х используется новый алгоритм работы с несоставными индексами, т.е. можно использовать несколько простых индексов
http://mysql.org/doc/refman/5.0/en/index-merge-optimization.html
я экспериментировал, поскольку у меня сейчас разные выборки. я делал длиной 1 символ для выборки like 'f%' (по первому символу) и длиной равной длине поля. по времени доступа с union результат одинаковый, а в or они не сработали...Автор оригинала: walrus
Vsevolod
у меня в 5 версии составные индексы работают так же, как и в 4
Но после перехода на 5 версию у меня выборка из 600тыс записей по условию like '%xxx%' стала гораздо быстрее, хотя как раз в моем случае индекс по текстовому полю точно не работает и работать не должен
а какую длину индекса ты используешь?
Прилично. У меня 2.5 сек. без индексов по 2-м полям varchar аналогичный запрос. 90.000 строк. P4 1,7 1Gb. При средней нагрузке сервера.Автор оригинала: walrus
сейчас запустил на свое базе след запросы
1. where name like 'a%' or name like 'b%';
Был полный скан таблицы в 600тыс записей, время выборки 5 сек.
2. такой же запрос ,но с union
Использовались индексы, время выполнения - 14 сек.
3. union all
Использовались индексы, время выполнения - 10 сек.
На сервере сейчас минимальная нагрузка, стоит только одна вот эта база, 2хXeon 3Ghz + 2GB памяти
Честно говоря, ожидал большего...
ну и сколько записей твой запрос возвращает ?Честно говоря, ожидал большего.
в зависимости от запроса 200-2000. тот что 2.5 секунды выполняется - 250 записей. в любом случае это значительно меньше 5%Автор оригинала: chira
ну и сколько записей твой запрос возвращает ?
индксы эффективны только если возвращаемый результат составляет ~5% от всех данных в таблице ...