|
|
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
Добрый день вот в таком запросе Код: plsql 1. почему лучше делать индекс вида Код: plsql 1. а не вида Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2013, 20:12:16 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
C чего бы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2013, 20:48:48 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
авторпочему лучше делать индекс вида для такого запроса всё равно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2013, 22:15:18 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
Akina, может, с того, что у ТСа селективность по айпи выше, чем по каунту? Кстати, даже если и не выше - при условии, что каунт всегда положителен и более-менее равномерно распределён - на использование первого индекса шансы ещё есть, на использование же второго - практически никаких, потому что под условие каунт>2 либо не попадёт вообще ни одна запись, либо попадёт как минимум треть всей таблицы :) YuriyB, покажите вывод этого запроса Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 05:40:38 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
ScareCrowдля такого запроса всё равно вы можете это как то аргументировать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 10:50:30 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
YuriyBДобрый день вот в таком запросе Код: plsql 1. почему лучше делать индекс вида Код: plsql 1. а не вида Код: plsql 1. ИМХО так: 1.без индекса - перебор всей таблицы (TABLE SCAN) построчно в поисках count>2 и ip=$ip 2.индекс (count,ip) - поиск (INDEX SEEK) count=2, перебор строк индекса (INDEX SCAN) в поисках count>2, как только найдено - перебор остатка индекса (INDEX SCAN) в поисках ip=$ip, найденное вытаскивать из таблицы в результат 3.индекс (ip,count) - поиск (INDEX SEEK) ip=$ip, перебор строк индекса (INDEX SCAN) в поисках count>2 пока ip=$ip, найденное вытаскивать из таблицы в результат вариант 3 априори представляется наиболее быстрым... Но если основная масса записей с count<=2 - оптимальнее второй вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 12:13:21 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
Cygapb-0072.индекс (count,ip) - поиск (INDEX SEEK) count=2, перебор строк индекса (INDEX SCAN) в поисках count>2, как только найдено - перебор остатка индекса (INDEX SCAN) в поисках ip=$ip , найденное вытаскивать из таблицы в результатНасколько я в курсе, MySQL выделенное не умеет. Т.е. в случае с индексом (count,ip) либо будет использовано только поле count, либо индекс вообще не будет использован, если MySQL сочтет, что у условия count>2 слишком низкая селективность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 12:32:42 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
ip_count(ip, count); делать лучше, потому что по IP у тебя фиксированное условие, а по count -- диапазон. Тогда у тебя будет позиционирование в ключе по двум полям (ip, count), а потом сканирование диапазона до конца данного значения IP. Если делать наоборот, то надо будет делать начальное позиционирование в индексе, потом сканирование диапазона, потом (когда кончится данный IP внутри группы одного и того же count) -- либо бесплодное сканирование далее, до следующего count и IP, либо ещё одно позиционирование по count и IP. В результате это всё по эффективности будет почти table scan. А первый вариант -- почти positioning by key. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 13:27:17 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
miksoftCygapb-0072.индекс (count,ip) - поиск (INDEX SEEK) count=2, перебор строк индекса (INDEX SCAN) в поисках count>2, как только найдено - перебор остатка индекса (INDEX SCAN) в поисках ip=$ip , найденное вытаскивать из таблицы в результатНасколько я в курсе, MySQL выделенное не умеет. Т.е. в случае с индексом (count,ip) либо будет использовано только поле count, либо индекс вообще не будет использован, если MySQL сочтет, что у условия count>2 слишком низкая селективность. Если он не умеет это делать, то тогда и подавно второй вариант индекса не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 13:28:04 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
tanglirAkina, может, с того, что у ТСа селективность по айпи выше, чем по каунту? Ну вообще я хотел заставить ТС медленно подойти к пониманию того, что всё зависит от точного текста запроса, количества данных в таблице и статистики по ним... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 13:36:24 |
|
||
|
вопрос о сотавных индексах
|
|||
|---|---|---|---|
|
#18+
miksoftCygapb-0072.индекс (count,ip) - поиск (INDEX SEEK) count=2, перебор строк индекса (INDEX SCAN) в поисках count>2, как только найдено - перебор остатка индекса (INDEX SCAN) в поисках ip=$ip , найденное вытаскивать из таблицы в результатНасколько я в курсе, MySQL выделенное не умеет. Т.е. в случае с индексом (count,ip) либо будет использовано только поле count, либо индекс вообще не будет использован, если MySQL сочтет, что у условия count>2 слишком низкая селективность.Похоже, именно так дела и обстоят, то есть от (count,ip) поиск только по count, от (ip,count) - учитываются оба... http://sqlfiddle.com/#!2/c51fe/7 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: sql 1. 2. 3. 4. 5. 6. 7. (count,ip) 367 строк с count>2, из них 2 с ip=21ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA1SIMPLEtest1rangecountcount 5 367100Using where; Using index (ip,count) 4 строки с ip=21 из них 2 с count>2ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA1SIMPLEtest2rangeipip 10 2100Using where; Using index (без индекса) - вот тут мне не совсем ясно, всего 1024 строки в таблице, отобрано 2 - что такое 769 - хз :) ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA1SIMPLEtest3ALL769100Using where PS MySQL - не родной, тока присматриваюсь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 14:06:06 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38359054&tid=1836292]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 352ms |

| 0 / 0 |
