|
|
|
Смена плана с INDEX на NATURAL при соед-нии небольшого числа строк
|
|||
|---|---|---|---|
|
#18+
hi all. LI-T3.0.0.31309 Чё-то не просеку, как такое может быть. Имеется две таблички: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. И вот такой блок, выводящий план соединения: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Оказывается, план этот будет благоприятным ( JOIN (R NATURAL, QD INDEX (QQQ_SND_RCV_SID_DESC)) ) - только при превышении в таблице QQQ числа строк некоторого порога. Причём, порог этот вроде бы как... "слегка переменный" :-) Если же число строк в QQQ невелико, то план сменится на QD NATURAL. Вот полный DDL + test: Код: 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. В нём выделены жирным шрифтом стейтменты, которые применялись (по-одному) к таблице QQQ. Чем объяснить, что ФБ не юзает индекс по QQQ при числе строк в ней менее 3 ("start rows") + 18 (с рандомами в третьем поле и не изменяемыми "префиксами" в первом и втором полях) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2014, 14:35 |
|
||
|
Смена плана с INDEX на NATURAL при соед-нии небольшого числа строк
|
|||
|---|---|---|---|
|
#18+
ТаблоидЧем объяснить, что ФБ не юзает индекс по QQQ при числе строк в ней менее 3 ("start rows") + 18 (с рандомами в третьем поле и не изменяемыми "префиксами" в первом и втором полях) ? стоимостной оценкой, очевидно. Твое мнение не совпадает с мнением оптимизатора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 23:00 |
|
||
|
Смена плана с INDEX на NATURAL при соед-нии небольшого числа строк
|
|||
|---|---|---|---|
|
#18+
dimitr, а кто-то когда-то тут говорил, что "если есть индекс, то он *будет* использоваться. точка" (цитирую по памяти). Или для малых таблиц это не действует ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 23:50 |
|
||
|
Смена плана с INDEX на NATURAL при соед-нии небольшого числа строк
|
|||
|---|---|---|---|
|
#18+
насколько вижу из метаданных, варианта планов тут два: 1) JOIN (R NATURAL, QD INDEX (QQQ_SND_RCV_SID_DESC)) 2) JOIN (QD NATURAL, R INDEX (RRR_SND_RCV_UNQ)) где тут "индекс не используется"? Или у тебя другие планы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2014, 23:57 |
|
||
|
Смена плана с INDEX на NATURAL при соед-нии небольшого числа строк
|
|||
|---|---|---|---|
|
#18+
dimitrнасколько вижу из метаданных, варианта планов тут два: 1) JOIN (R NATURAL, QD INDEX (QQQ_SND_RCV_SID_DESC)) 2) JOIN (QD NATURAL, R INDEX (RRR_SND_RCV_UNQ)) где тут "индекс не используется"? Или у тебя другие планы?Ну так в обоих случаях вижу 'NATURAL'. И хрен бы с этой 'RRR', но вот про 'QQQ' какая-то тревога закрадывается... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 00:10 |
|
||
|
Смена плана с INDEX на NATURAL при соед-нии небольшого числа строк
|
|||
|---|---|---|---|
|
#18+
ТаблоидНу так в обоих случаях вижу 'NATURAL'. для ведущей таблицы, будь она QQQ или RRR, в этом запросе невозможно использовать индекс. А для ведомой он используется в обоих случаях. К чему именно претензии? Вынеси SID из композита в отдельный индекс, тогда и получишь "конфетку". ТаблоидИ хрен бы с этой 'RRR', но вот про 'QQQ' какая-то тревога закрадывается... :-) порядок джойна определяется в том числе размером таблиц. И ты это явно обязан знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 00:17 |
|
||
|
|

start [/forum/topic.php?fid=40&tid=1563343]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
170ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 223ms |
| total: | 491ms |

| 0 / 0 |
