|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Чтобы не плодить темы - спрошу здесь. Мне надо отобрать из таблицы записи, время создание которых больше 7 вечера текущего дня. Собственно пробовал Код: sql 1.
- запрос выполняется по-моему вечно, останавливал после 10 минут выполнения. P.S. Adaptive Server Enterprise 15.7 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2018, 12:24 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
GroMoZeKazzz, применение функции к полю таблицы делает аргумент с её использование NON SARG, что препятствует использованию индекса по этому полю (даже если он есть). Нужно переписать условие запроса так, что бы предикат стал SARG-ом. Для этого нужно исходное поле таблицы, без каких-либо модификаций над ним, сравнивать с нужной тебе датой-временем (19 часов текущего дня)... поле_с_датой >= <а тут нужно на основе GETDATE как-то собрать значение, соответствующее 19 часам текущего дня> ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2018, 12:57 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Добрый Э - Эх... поле_с_датой >= <а тут нужно на основе GETDATE как-то собрать значение, соответствующее 19 часам текущего дня> Ок, попробую собрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2018, 13:06 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Собрал конструкцию dateadd(hour, 12, convert(datetime, convert(date, getdate()))) - легче не стало. Тестирую на данных с 50 записями, отвечающими временному параметру - запрос выполняется уже 5 минут... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2018, 18:34 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
А всегда так будет долго выполняться, вам надо процедурку писать, в которой сначала вычисляться значение даты и лишь затем делаться селект, в ASA я могу еще посоветовать сделать внешнюю процедуру в виде подключаемой библиотеки на вычисление условия, но не знаю можно это сотворить в ASE ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2018, 21:17 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
GroMoZeKazzz, показывай структуру таблицы, схему индексирования, состав и распределение данных, количество строк в таблице, текст запроса и план его выполнения. Без этой информации любые рекомендации будут из разряды "пальцем в небо"... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 05:36 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Добрый Э - Эх, количество записей в таблице больше 400 миллионов, но этой таблице уже ооооочень много лет. Интересующих записей за день бывает не больше 20-30 штук. Текст запроса: Код: sql 1.
Код создания таблицы: Код: sql 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. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127.
Работаю с каким-то самописным клиентом для базы, он выдает вот такой план выполнения: Print |ROOT:EMIT Operator (VA = 2) | | |RESTRICT Operator (VA = 1)(11)(0)(0)(0)(0) | | | | |SCAN Operator (VA = 0) | | | FROM TABLE | | | pay | | | p | | | Table Scan. | | | Forward Scan. | | | Positioning at start of table. | | | Using I/O Size 64 Kbytes for data pages. | | | With MRU Buffer Replacement Strategy for data pages. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 12:50 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
29.01.2018 12:50, GroMoZeKazzz пишет: > количество записей в таблице больше 400 миллионов Солидно :). > Код создания таблицы: Нет бы вместо этой мусорки просто перечислить индексы. Кстати, индекса по DTran я не увидел ;). > |ROOT:EMIT Operator (VA = 2) > | > | |RESTRICT Operator (VA = 1)(11)(0)(0)(0)(0) > | | > | | |SCAN Operator (VA = 0) > | | | FROM TABLE > | | | pay > | | | p > | | | Table Scan. Нет индекса, поэтому фуллскан всех 400 мегазаписей. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 12:55 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Dim2000, +1 Индекса по полю DTran нет - читай таблицу полностью... А на 400 млн. записей - это будет не быстро... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 13:14 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Добрый Э - ЭхDim2000, +1 Индекса по полю DTran нет - читай таблицу полностью... А на 400 млн. записей - это будет не быстро... Так я в запросе и DConfirm подставлял - на нем то индекс есть... И все так же бесконечно долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 14:47 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Потрясу хозяев ресурса - может повесят индекс :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 15:31 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
29.01.2018 14:47, GroMoZeKazzz пишет: > Так я в запросе и DConfirm подставлял - на нем то индекс есть... И все > так же бесконечно долго. Если ты имеешь в виду индекс CREATE NONCLUSTERED INDEX Pay_4Export ON Pay(DExport ASC,DConfirm ASC) то его использовать для выборки _только_ по DConfirm нельзя - составной индекс можно использовать для поиска только по его первым полям. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 16:11 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
GroMoZeKazzzПотрясу хозяев ресурса - может повесят индекс :) А вы не смотрели сколько времени идет запрос, в котором вместо вычисляемых значений будет константа? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 16:24 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Sergey Orlov, когда в параметрах запроса константа, то выполняется за приемлемое время. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 18:41 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
GroMoZeKazzzSergey Orlov, когда в параметрах запроса константа, то выполняется за приемлемое время. Наличие индекса не поможет, у вас банально берется строка, из нее поле date, рассчитываются условие через вызовы функций convert, dateadd, getdate и после этого принимается решение включить ее в селект или нет, отсюда и идет фул скан таблицы. Поэтому я и предложил: 1. создания процедуры, в которой сначала высчитывается константа и лишь селект либо 2. создать внешнюю процедуру на с, которая будет рассчитsвать константу гораздо быстрее нежели средствами ASE, пусть и для каждой строки Давно было, по-моему тогда юэал asa5.5, я забирал данные из dbf в кодировке cp866, а база уже тогда была в cp1251, так сначала я конвертировал средствами sql-сревера. но на мой взгляд было очень долго, а после ее написания на с и оформления в виде dll, конвертация таблицы по времени стала как простой запрос... А так есть индекс, нет индекса все по барабану... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2018, 19:49 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Sergey OrlovА всегда так будет долго выполняться, вам надо процедурку писать, в которой сначала вычисляться значение даты и лишь затем делаться селект, в ASA я могу еще посоветовать сделать внешнюю процедуру в виде подключаемой библиотеки на вычисление условия, но не знаю можно это сотворить в ASE Нет, нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2018, 14:09 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
Sergey Orlov...Поэтому я и предложил: 1. создания процедуры, в которой сначала высчитывается константа и лишь селект либо 2. создать внешнюю процедуру на с, которая будет рассчитsвать константу гораздо быстрее нежели средствами ASE, пусть и для каждой строки Дяденька, я не настоящий сварщик (с) :) Sybase подкрадывается ко мне редко, так что писать процедуру нет ни времени, не желания. А с С так я вообще не знаком. Всем +100 в карму за советы! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2018, 17:00 |
|
Помогите с запросом со временем
|
|||
---|---|---|---|
#18+
авторP.S. Adaptive Server Enterprise 15.7 select * from p ay p where p.DTran > dateadd(hour, 10, convert(datetime, convert(date, getdate()))) Код создания таблицы: CREATE TABLE dbo. P ay ............................................... Работаю с каким-то самописным клиентом для базы, он выдает вот такой план в | | |SCAN Operator (VA = 0) | | | FROM TABLE | | | p ay ASE всегда был Case Sensitive. Декларится один объект а в селектах пользуется другой :( ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 16:42 |
|
|
start [/forum/topic.php?fid=55&fpage=2&tid=2009622]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 177ms |
0 / 0 |