|
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
|
|||
---|---|---|---|
#18+
Всем доброго... То ли пятница, то ли... Есть некоторый тривиальный запрос (джойн 6 таблиц, 1 - Left join)+ ряд условий WHERE. Ничего криминального и специфичного. Но вот загадко: если указан Код: sql 1.
оптимизатор - должным образом все понимает и выбирает нужные индексы и т.п. Как только задаю список колонок явно (даже просто одно поле одной таблицы t.ID numeric(15)) без изменения структуры джойнов и условий = все. Оптимизатору сносит мозг. Начинаются повальные TableScan. При этом речь не идет про LOB и т.п. - тривиальные вполне таблицы по структуре. С чего бы это? Кто-нибудь сталкивался с подобными граблями? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2016, 21:44 |
|
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
|
|||
---|---|---|---|
#18+
Mikle83 Как только задаю список колонок явно (даже просто одно поле одной таблицы t.ID numeric(15)) без изменения структуры джойнов и условий = все. Оптимизатору сносит мозг. Начинаются повальные TableScan. это сказки. серьезно. это не так. на самом деле есть два запроса и у них разные планы. а почему - дело десятое. Mikle83С чего бы это? Кто-нибудь сталкивался с подобными граблями? да, типичная ситуация, что если у тебя два разных запроса, то у них будут разные планы. ты какую проблему хочешь решить? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2016, 21:54 |
|
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
|
|||
---|---|---|---|
#18+
MasterZiv, не понял. Что такое "два разных запроса"? Делаю отладку запроса готового в Interactive SQL. Ставлю show plan on/noexec on дабы мониторить, т.к. исходный запрос тупит. Собственно, делаю только одно изменение - секция SELECT либо комент на все + *, либо список полей. План меняется кардинально. Если б речь шла про "черный ящик" приложения - то да, я бы стал грешить на разные запрос. Но запросы - вот они перед глазами :) Собственно, может кто-то с таким сталкивался и это какая-то очередная бага в новых SP от SAPa? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2016, 11:24 |
|
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
|
|||
---|---|---|---|
#18+
А что мешает указать хинты? А statement cache включен или дампирование планов? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2016, 12:47 |
|
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
|
|||
---|---|---|---|
#18+
не понял. Что такое "два разных запроса"? текст двух запросов разный? разный. Следовательно, планы разные. Планы в кэше хранятся на основе текста запроса. Текст другой - план другой, или вообще нет плана в кэше, надо заново строить. Строится - а статистика другая. План тоже другой как следствие. Собственно, делаю только одно изменение - секция SELECT либо комент на все + *, либо список полей. План меняется кардинально. не делай изменений. или пиши хинты или абстрактные планы. Собственно, может кто-то с таким сталкивался и это какая-то очередная бага в новых SP от SAPa? это не баг, а штатное, ожидаемое поведение, причем характере не только для ASE, но и для 80% всех СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2016, 13:04 |
|
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
|
|||
---|---|---|---|
#18+
MasterZiv, почему считаю, что поведение не совсем нормальное: для меня было парадигмой, что запросы с явным указанием списка колонок - для сервера как минимум не должны быть сложнее, нежели SELECT *. Я пока не могу предположить, по какой причине на SELECT * сервер считает нужным использовать индексы, а при указании конкретных колонок - индексы не используются. Обратная ситуация = она 100% понятна и прозрачна, но... cherrex_Den , Statenment cache отключен ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2016, 14:53 |
|
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
|
|||
---|---|---|---|
#18+
Mikle83 MasterZiv, почему считаю, что поведение не совсем нормальное: для меня было парадигмой, что запросы с явным указанием списка колонок - для сервера как минимум не должны быть сложнее, нежели SELECT *. Значит, ты ошибался Потом, дело тут не в "сложнее/проще", ты не можешь на основе текста запроса или плана рассуждать о сложности запроса, а скорее "судьба/несудьба". Одному запросу повезло, другому нет. Mikle83Я пока не могу предположить, по какой причине на SELECT * сервер считает нужным использовать индексы, а при указании конкретных колонок - индексы не используются. Я тебе объяснил уже, один запрос например попадает в кэш планов, другой -- нет, и план генерируется заново. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2016, 20:13 |
|
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
|
|||
---|---|---|---|
#18+
Mikle83считаю, что поведение не совсем нормальное Ладно, переведём вопрос в практическую плоскость. Ещё раз, такие ситуации являются нормальными и типичными для РСУБД с COST-BASED оптимизатором. 80% запросов оптимизируются нормально, 20% -- мимо кассы, надо шаманить. Ты ещё какие-то проблемы хочешь решить, кроме этой ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2016, 20:28 |
|
|
start [/forum/topic.php?fid=55&fpage=5&tid=2009738]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 156ms |
0 / 0 |