|
|
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Вопрос профессионалам: имеет ли практический смысл индекс на boolean или tinyint (c 2мя - 4мя значениями)? Я нутром чую, что расходов на индекс будет много, эффективность низкая. Ситуация такая, есть 5000 тысяч товаров, есть 5 товаров дня. Не хочу создавать для них отдельную таблицу, добавляю флажок с индексом, но спасёт ли? --------------------------------------- Не шалю, никого не трогаю, починяю примус (С) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 13:51 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Нет смысла, т.к. избирательность такого индекса никакая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:10 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Не имеетНет смысла, т.к. избирательность такого индекса никакая и какое решение мне подойдёт лучше? с доп.таблицей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:12 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Alexey FurmanovВопрос профессионалам: имеет ли практический смысл индекс на boolean или tinyint (c 2мя - 4мя значениями)? b-tree индекс в этом случае бессмысленен. Можно рассмотреть bitmap индекс, хотя если такое поле одно, и он скорее всего малоинтересен. Если ситуация такова, что очень много запросов отсекает именно по этому критерию, наилучшим выходом будет партиционирование по этому полю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:37 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Alexey Furmanovс доп.таблицей? В Вашем случае именно это решение будет наилучшим, то есть, просто отдельная таблица со ссылками на товары, а где надо только товары дня тащить - inner join. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:51 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовВ Вашем случае именно это решение будет наилучшим, то есть, просто отдельная таблица со ссылками на товары, а где надо только товары дня тащить - inner join. Сереж, Вы серьезно так думаете? Чем же это решение будет наилучшим? Это просто неэффективная сама по себе имитация того самого индекса, который не будет использоваться из-за плохой селективности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:52 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
softwarerСереж, Вы серьезно так думаете? Чем же это решение будет наилучшим? Уверен, практика подтверждает это. Это работает следующим образом. Сервер выполняет скан таблицы со ссылками (она маленькая и вся в памяти). Потом линкуется с большой. softwarerЭто просто неэффективная сама по себе имитация того самого индекса, который не будет использоваться из-за плохой селективности. Это нормальное решение для случая, когда решение через индекс не работает, а вовсе не "неэффективная сама по себе имитация того самого индекса". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:56 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
softwarerb-tree индекс в этом случае бессмысленен. Можно рассмотреть bitmap индекс, хотя если такое поле одно, и он скорее всего малоинтересен. Если ситуация такова, что очень много запросов отсекает именно по этому критерию, наилучшим выходом будет партиционирование по этому полю. Спасибо, сделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:59 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовУверен, практика подтверждает это. Хотел бы на это посмотреть. Сергей ВаскецовЭто работает следующим образом. Сервер выполняет скан таблицы со ссылками (она маленькая и вся в памяти). Потом линкуется с большой. И что из этого? Тормоза идут как раз на "линкуется с большой". Индекс тоже небольшой и тоже может быть весь в памяти. Сергей ВаскецовЭто нормальное решение для случая, когда решение через индекс не работает, Почему же оно не работает? Сергей Васкецова вовсе не "неэффективная сама по себе имитация того самого индекса". Хм. Давайте так. На текущий момент - я уверен, что в описанной ситуации если заставить работать через индекс (например, хинтом) это будет эффективнее, нежели работать описанным образом. Сейчас подготовлю пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:00 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Alexey FurmanovСпасибо, сделал так: надеюсь, я понял правильно К тому, что говорил я, это отношения не имеет. Это решение, о котором говорит Сергей, и которое по моему разумению будет менее эффективно чем индекс и чем просто доступ к основной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:03 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Alexey FurmanovСитуация такая, есть 5000 тысяч товаров, есть 5 товаров дня. Cтоп! Упустил из вида, что у вас перекошенная статистика. В этом случае индекс - самое оно, хотя надо посмотреть, как в вашем сервере построить его так, чтобы он правильно использовался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:05 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
softwarerК тому, что говорил я, это отношения не имеет. Это решение, о котором говорит Сергей, и которое по моему разумению будет менее эффективно чем индекс и чем просто доступ к основной таблице. прошу прощения, а что есть "партиционирование" и где можно прочитать об этом? я посчитать что это и есть партиционирование... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:10 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
softwarer Alexey FurmanovСитуация такая, есть 5000 тысяч товаров, есть 5 товаров дня. Cтоп! Упустил из вида, что у вас перекошенная статистика. В этом случае индекс - самое оно, хотя надо посмотреть, как в вашем сервере построить его так, чтобы он правильно использовался. MySQL 5.0.45 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:13 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
softwarerНа текущий момент - я уверен, что в описанной ситуации если заставить работать через индекс (например, хинтом) это будет эффективнее, нежели работать описанным образом. Сейчас подготовлю пример. Допускаю, что на ORACLE это так и будет. Я бы на месте автора озаботился спецификой конкретного его сервера (например, имеет ли сервер право игнорировать хинт), набросав врукопашную пару примеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:14 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Скажем, вот пример для Oracle, который показывает, что решение с индексом будет эффективнее. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:15 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Вдогонку. softwarerТормоза идут как раз на "линкуется с большой". Да нет, будет что-нибудь типа банального позиционирования по первичному ключу (не готов сходу написать, как это в планах ORACLE пишется). softwarerИндекс тоже небольшой и тоже может быть весь в памяти. Как раз я согласен, тут могут быть особенности ORACLE-а работы с NULL-ами в индексах. Если это не так, и индекс большой, то серверу его использовать смысла будет мало, в отличие от варианта с крошечной таблицей, пусть там даже будет "страшный" фул скан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:19 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовДопускаю, что на ORACLE это так и будет. Я уверен, что так будет на любом сервере. Потому что "таблица со списком id" - это фактически и есть индекс, только реализованный... необычным образом. Там, где это решение будет эффективным - трудно представить себе, что индекс будет неэффективным, и наоборот. Сергей ВаскецовЯ бы на месте автора озаботился спецификой конкретного его сервера Это безусловно. Надо идти в гугль и смотреть, как в конкретном сервере делать индексы по полю с перекошенным распределением значений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:20 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовВдогонку. softwarerТормоза идут как раз на "линкуется с большой". Да нет, будет что-нибудь типа банального позиционирования по первичному ключу (не готов сходу написать, как это в планах ORACLE пишется). Хм. Если я Вас правильно понял, мы говорим ровно об одном и том же. Сергей ВаскецовКак раз я согласен, тут могут быть особенности ORACLE-а работы с NULL-ами в индексах. Это тут незначимо. Так, как я написал, мы получим плюс в размере индекса - не хранятся данные для "неинтересных" строк. На скорость выборки по этому индексу работа с null-ами влияния не окажет - мы ведь делаем не full scan индекса, а range scan. Сергей ВаскецовЕсли это не так, и индекс большой, то серверу его использовать смысла будет мало Почему? Будет все то же самое - интересные блоки из этого индекса будут закешированы в памяти, а все прочее нехай себе валяется на диске, только места займет больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:23 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
softwarerЭто безусловно. Надо идти в гугль и смотреть, как в конкретном сервере делать индексы по полю с перекошенным распределением значений. Сенкс, идея ясна, доп.таблица - лучше чем кривые индексы, индексы - правильнее, но нужно знать, как правильно настроить... пошёл в гугль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:24 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
softwarerЯ уверен, что так будет на любом сервере. Потому что "таблица со списком id" - это фактически и есть индекс, только реализованный... необычным образом Попробуйте поле флага заполнить "N" для всех остальных значений, кроме "Y", и повторить эксперимент. Этим Вы увеличите размер индекса, так что ситуация изменится. Я не знаю, как MySQL 5.0.45 строит индексы по полям, где почти все значения NULL, возможно, будет также, как в Вашем примере (и тогда с индексом проще). Но может быть и обратная ситуация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:26 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Alexey Furmanovпрошу прощения, а что есть "партиционирование" и где можно прочитать об этом? http://www.google.ru/search?hl=ru&q=mysql+partitioning&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=0&oq=mysql+partition ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:26 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Alexey Furmanovкак правильно настроить... пошёл в гугль Если подумать над постановкой самой задачи, я бы вообще признаки, что товар в "товарах дня" не пихал в таблицу товаров. Это в точности то же самое, как не так давно обсуждаемая тема с нумерацией товаров в прайслистах и всяких рекламных акциях. Лучше сделать отдельный заголовок (где хранить диапазон дат и прочую фигню), и к нему состав с перечнем товаров. Все равно "товар дня" обычно не просто так возникает, могут быть скидки всякие, печать перечня товаров дня (в том числе и на завтра при действующем сегодня старом перечне товаров дня) и прочие вкусности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:32 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовПопробуйте поле флага заполнить "N" для всех остальных значений, кроме "Y", и повторить эксперимент. Этим Вы увеличите размер индекса, так что ситуация изменится. Изменится крайне незначительно. Увеличился глубина индекса, так что придется читать на один-два блока больше. Но показанное соотношение логических чтений (в два с лишним раза) останется как есть. Собственно, без проблем. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:32 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
softwarerИзменится крайне незначительно Спасибо. Я в общем-то так и думал, если честно, зная умение ORACLE работать с индексами. Автору рекомендую повторить Ваш эксперимент у себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:36 |
|
||
|
Имеет ли смысл индекс на boolean?
|
|||
|---|---|---|---|
|
#18+
Сергей Васкецов softwarerИзменится крайне незначительно Спасибо. Я в общем-то так и думал, если честно, зная умение ORACLE работать с индексами. Автору рекомендую повторить Ваш эксперимент у себя. К сожалению, вопрос решился сам собой, на серверах установлен MySQL без поддержки партишионинга (ну а хостеру его включить, конечно же, тяжелее, чем мне использовать еханизм с доп.таблицей), маразм победил разум :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 15:42 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35256580&tid=1543920]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 341ms |

| 0 / 0 |
