Гость
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 15.7: [select * ] vs [select {Column List} ] = [* - win] / 8 сообщений из 8, страница 1 из 1
22.01.2016, 21:44
    #39153423
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
Всем доброго...
То ли пятница, то ли...

Есть некоторый тривиальный запрос (джойн 6 таблиц, 1 - Left join)+ ряд условий WHERE.
Ничего криминального и специфичного.

Но вот загадко: если указан
Код: sql
1.
select * from ....


оптимизатор - должным образом все понимает и выбирает нужные индексы и т.п.

Как только задаю список колонок явно (даже просто одно поле одной таблицы t.ID numeric(15)) без изменения структуры джойнов и условий = все.
Оптимизатору сносит мозг. Начинаются повальные TableScan.

При этом речь не идет про LOB и т.п. - тривиальные вполне таблицы по структуре.

С чего бы это? Кто-нибудь сталкивался с подобными граблями?
...
Рейтинг: 0 / 0
24.01.2016, 21:54
    #39154133
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
Mikle83
Как только задаю список колонок явно (даже просто одно поле одной таблицы t.ID numeric(15)) без изменения структуры джойнов и условий = все.
Оптимизатору сносит мозг. Начинаются повальные TableScan.


это сказки.
серьезно. это не так. на самом деле есть два запроса и у них разные планы. а почему - дело десятое.

Mikle83С чего бы это? Кто-нибудь сталкивался с подобными граблями?

да, типичная ситуация, что если у тебя два разных запроса, то у них будут разные планы.

ты какую проблему хочешь решить?
...
Рейтинг: 0 / 0
25.01.2016, 11:24
    #39154330
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
MasterZiv,

не понял. Что такое "два разных запроса"?
Делаю отладку запроса готового в Interactive SQL.
Ставлю show plan on/noexec on дабы мониторить, т.к. исходный запрос тупит.

Собственно, делаю только одно изменение - секция SELECT либо комент на все + *, либо список полей.
План меняется кардинально.


Если б речь шла про "черный ящик" приложения - то да, я бы стал грешить на разные запрос.
Но запросы - вот они перед глазами :)

Собственно, может кто-то с таким сталкивался и это какая-то очередная бага в новых SP от SAPa?
...
Рейтинг: 0 / 0
25.01.2016, 12:47
    #39154437
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
А что мешает указать хинты?

А statement cache включен или дампирование планов?
...
Рейтинг: 0 / 0
25.01.2016, 13:04
    #39154459
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
не понял. Что такое "два разных запроса"?

текст двух запросов разный? разный.
Следовательно, планы разные.
Планы в кэше хранятся на основе текста запроса. Текст другой - план другой, или вообще нет плана в кэше, надо заново строить. Строится - а статистика другая. План тоже другой как следствие.




Собственно, делаю только одно изменение - секция SELECT либо комент на все + *, либо список полей.
План меняется кардинально.

не делай изменений. или пиши хинты или абстрактные планы.



Собственно, может кто-то с таким сталкивался и это какая-то очередная бага в новых SP от SAPa?


это не баг, а штатное, ожидаемое поведение, причем характере не только для ASE, но и для 80% всех СУБД.
...
Рейтинг: 0 / 0
25.01.2016, 14:53
    #39154634
Mikle83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
MasterZiv,
почему считаю, что поведение не совсем нормальное: для меня было парадигмой, что запросы с явным указанием списка колонок - для сервера как минимум не должны быть сложнее, нежели SELECT *.

Я пока не могу предположить, по какой причине на SELECT * сервер считает нужным использовать индексы, а при указании конкретных колонок - индексы не используются.

Обратная ситуация = она 100% понятна и прозрачна, но...

cherrex_Den , Statenment cache отключен
...
Рейтинг: 0 / 0
25.01.2016, 20:13
    #39155016
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
Mikle83 MasterZiv,
почему считаю, что поведение не совсем нормальное: для меня было парадигмой, что запросы с явным указанием списка колонок - для сервера как минимум не должны быть сложнее, нежели SELECT *.


Значит, ты ошибался

Потом, дело тут не в "сложнее/проще", ты не можешь на основе текста запроса или плана рассуждать о сложности запроса,
а скорее "судьба/несудьба". Одному запросу повезло, другому нет.


Mikle83Я пока не могу предположить, по какой причине на SELECT * сервер считает нужным использовать индексы, а при указании конкретных колонок - индексы не используются.


Я тебе объяснил уже, один запрос например попадает в кэш планов, другой -- нет, и план генерируется заново.
...
Рейтинг: 0 / 0
25.01.2016, 20:28
    #39155028
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 15.7: [select * ] vs [select {Column List} ] = [* - win]
Mikle83считаю, что поведение не совсем нормальное

Ладно, переведём вопрос в практическую плоскость.

Ещё раз, такие ситуации являются нормальными и типичными для РСУБД с COST-BASED оптимизатором.
80% запросов оптимизируются нормально, 20% -- мимо кассы, надо шаманить.

Ты ещё какие-то проблемы хочешь решить, кроме этой ?
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 15.7: [select * ] vs [select {Column List} ] = [* - win] / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]