|
|
|
использование индеков
|
|||
|---|---|---|---|
|
#18+
Чисто теоретический вопрос. В таблице может быть несколько индексов. В MySQL для того чтобы при запросе использовался индекс необходимо чтобы в каждой группе(разделённой OR) присутствовал индекс(или его часть). Получается что для отдельного запроса может использоваться только один индекс? Может ли для одного запроса использоваться несколько индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 18:49 |
|
||
|
использование индеков
|
|||
|---|---|---|---|
|
#18+
Если в запросе происходит поиск по двум поиндексированным полям, оптимизатор выбирает наиболее подходящий индекс и использует его -- http://jcatki.no-ip.org/c++/bart.jpg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2004, 00:20 |
|
||
|
использование индеков
|
|||
|---|---|---|---|
|
#18+
Точно. Но вопрос сводится к тому ПОЧЕМУ оптимизатор так поступает? Например есть большая таблица с большим количеством колонок. Запрос отбирает записи по 2 полям. select * from tab where fi1='some' or fi2='anot' И допустим имеется кроме прочего 2 индекса по fi1 и fi2 Так вот получается, что эти индексы до лампочки и будет идти последовательный перебор строчка за строчкой. А ведь как было бы чудно - строится(при помощи индексов) битовая карта(bitmap) по первому условию, по второму. И тупо соединяется. Невооружённым глазов видно - что это быстрее чем последовательно. Так ПОЧЕМУ оптимизатор так не поступает. Мне это принципиально понять надо. Пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2004, 01:23 |
|
||
|
использование индеков
|
|||
|---|---|---|---|
|
#18+
Тут уже IMHO бо точно не уверен Если индекс не составной, а их 2 то оптимизатор выбирает из двух наиболее разреженный индекс по нему производит выборку а далее последовательным перебором уже проходит второе условие Гуру поправят если не так ) -- http://jcatki.no-ip.org/c++/bart.jpg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2004, 03:10 |
|
||
|
использование индеков
|
|||
|---|---|---|---|
|
#18+
Нет. цит. из MySQL мануала: These WHERE clauses do NOT use indexes: ... WHERE index=1 OR A=10 /* Index is not used in both AND parts */ Эх, зашёл бы сюда какой-нибудь ВЕЛИКИЙ УМ, просвятил бы ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2004, 13:02 |
|
||
|
использование индеков
|
|||
|---|---|---|---|
|
#18+
Точно я написал я имел ввиду AND а OR хез как работает ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2004, 13:57 |
|
||
|
использование индеков
|
|||
|---|---|---|---|
|
#18+
От вас дождёшся ответа... Кстати в DBISAM таже штука(да и везде наверное) - запосы с OR вообще не оптимизируются. Говорят, что это не работает потому, что индексные файлы полностью не хранятся в памяти, а по мере надобности их страницы(физические) подгружаются. Хотя с другой стороны если оперативы немеряно, то в чём проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 11:56 |
|
||
|
использование индеков
|
|||
|---|---|---|---|
|
#18+
Насколько я понял отсюда: http://dev.mysql.com/doc/mysql/en/Index_Merge_optimization.html в пятерке появился новый метод оптимизации подобных запросов. Хотя для меня все еще как-то мутно... Может всем скопом разберемся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 15:34 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32752406&tid=1854686]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
141ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 444ms |

| 0 / 0 |
