|
|
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
Adaptive Server Enterprise 12.5.2 Есть большая таблица, миллионы записей в ней есть ID и дата записи и по ID и дате есть индексы требуется найти максимальный ID, где дата записи меньше определённой даты Код: plaintext 1. 2. Выполняется очень медленно, неиндексное чтение Как можно ускорить процесс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 09:54 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
User44Adaptive Server Enterprise 12.5.2 Есть большая таблица, миллионы записей в ней есть ID и дата записи и по ID и дате есть индексы требуется найти максимальный ID, где дата записи меньше определённой даты Код: plaintext 1. 2. Выполняется очень медленно, неиндексное чтение Как можно ускорить процесс? поставьте хинт Код: plaintext 1. 2. А так план смотреть надо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 10:27 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
покажите, плз, результат этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 10:31 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
User44 пишет: А сколько примерно записей у вас вернёт запрос : select count(*) from Table1 where DateID < @Date (можно не выполнять, а сказать примерно, можно в процентах от объёма таблицы). Кроме того, ДВА ОТДЕЛЬНЫХ индекса тут не очень помогут. Подошёл бы один составной, типа create index date_id on Table1 (date ASC, id DESC) Но насколько он нужен для других запросов - вам виднее. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 10:49 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
komradпокажите, плз, результат этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Запустил, вот: Код: 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. 104. 105. 106. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 11:23 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
И еще вот это: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 11:29 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
User44Adaptive Server Enterprise 12.5.2 Есть большая таблица, миллионы записей в ней есть ID и дата записи и по ID и дате есть индексы требуется найти максимальный ID, где дата записи меньше определённой даты Код: plaintext 1. 2. Выполняется очень медленно, неиндексное чтение Как можно ускорить процесс? Насколько я помню ASE, будет как-то так set rowcount 1; select @maxID = ID from Table1 where DateID<@Date order by DateID desc; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 11:35 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
konstantinesUser44Adaptive Server Enterprise 12.5.2 Есть большая таблица, миллионы записей в ней есть ID и дата записи и по ID и дате есть индексы требуется найти максимальный ID, где дата записи меньше определённой даты Код: plaintext 1. 2. Выполняется очень медленно, неиндексное чтение Как можно ускорить процесс? Насколько я помню ASE, будет как-то так set rowcount 1; select @maxID = ID from Table1 where DateID<@Date order by DateID desc; Пардон, обманул :) order by id desc; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 11:41 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
konstantines Пардон, обманул :) order by id desc; Одинаково бесполезно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 11:48 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
А вот так получилось намнооого быстрее :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 12:08 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
либо так, либо статистику обновить, либо индексы перестроить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 12:16 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
komrad пишет: > declare @Date datetime > select @Date=... > select max(ID) > from Table1 > where DateID < @Date Тут бы надо было подставить дату в виде константы, а то оптимизатор значения не знает и дефолтную селективность берёт. Так вот надо : select max(ID) from Table1 where DateID < '20080701' Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 18:13 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
User44 пишет: > declare @DateID datetime > > select @DateID = max(DateID) > from Table1 (index DateID_FK) > where DateID < @Date > > select @maxID = max(ID) > from Table1 (index DateID_FK) > where DateID = @DateID Да не в этом дело, а в том, чтобы заставить оптимизатор использовать индекс. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 18:15 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
Могу ошибаться, так как азешку давненько ковырял. У нее ведь планы формируются на этапе компиляции запроса и являются статичными? Поэтому она и не может учитывать значение вычисленной переменной в плане завпроса. Итого остается либо хинтовать, либо исполнять динамически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 18:41 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
MasterZiv komrad пишет: > declare @Date datetime > select @Date=... > select max(ID) > from Table1 > where DateID < @Date Тут бы надо было подставить дату в виде константы, а то оптимизатор значения не знает и дефолтную селективность берёт. Так вот надо : select max(ID) from Table1 where DateID < '20080701' это я оставил на сообразительность автора... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 19:18 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
Ggg_old пишет: > Могу ошибаться, так как азешку давненько ковырял. У нее ведь планы > формируются на этапе компиляции запроса и являются статичными? Поэтому > она и не может учитывать значение вычисленной переменной в плане > завпроса. Итого остается либо хинтовать, либо исполнять динамически. да. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 00:40 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
Это кстати один из фактров, почему ASE проигрывает на корпоративном секторе. Даже, вроде-бы более легковесная аса и та, все вопросы обрабатывет динамически и учитывает вычисленные выражения. Why CORBA is DEAD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 11:25 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
Ggg_old пишет: > Это кстати один из фактров, почему ASE проигрывает на корпоративном секторе. > Даже, вроде-бы более легковесная аса и та, все вопросы обрабатывет > динамически и учитывает вычисленные выражения. Это далеко не так. Не только ASE так ведёт себя со значениями и оптимизацией. То же наблюдается и в Oracle, и в MSSQL, и думаю во многих других СУБД. И, в общем-то, это -- не самая большая проблема. ASE ничего не проигрывает ни на каком корпоративном секторе, она вполне себе тягаться может с любой СУБД enterprise-класса. Просто она меньше распространена, причём это и причина, и следствие одновременно, и вырваться из этого порочного круга сложно. И опять-таки не только Sybase ASE. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 19:16 |
|
||
|
Неиндексное чтение
|
|||
|---|---|---|---|
|
#18+
User44А вот так получилось намнооого быстрее :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Всем спасибо! В общем случае этот код может давать неверный результат, так как ID на максимальную дату не обязательно максимален на всем диапозоне дат до даты @Date. Только если вы об этом знаете заранее. Но это знание может в какой-то момент подвести, так что я бы не рекомендовал так делать. Если же вам надо получить максимальный ID от даты максимально близкой к @date, тогда исходный код в первом посте неверен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2008, 21:29 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=35657397&tid=2011280]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 146ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...