powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Использование индекса для сортировки
25 сообщений из 33, страница 1 из 2
Использование индекса для сортировки
    #37929993
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему следующий запрос в упор не хочет использовать индекс при сортировке результата?
что нужно сделать, чтобы уговорить его изменить свое мнение?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
IF OBJECT_ID ('dbo.test1') IS NOT NULL
	DROP TABLE dbo.test1
GO

CREATE TABLE dbo.test1
	(
	int1                INT NULL,
	numb1               numeric(10) NULL,
	int2                INT NULL,
	vchar1              varchar(10),
	)
GO

CREATE CLUSTERED INDEX XPKTest1
	ON dbo.Test1  (int1,numb1,int2)
GO



Код: sql
1.
2.
3.
select int1,numb1,int2
 from Test1 (index XPKTest1)
 order by int1,numb1,int2


QUERY PLAN FOR STATEMENT 1 (at line 1).
STEP 1
The type of query is INSERT.
The update mode is direct.
Worktable1 created, in allpages locking mode, for ORDER BY.
FROM TABLE
Test1
Nested iteration.
Using Clustered Index.
Index : XPKTest1
Forward Scan.
Positioning at index start.
Index contains all needed columns. Base table will not be read.
Using I/O Size 8 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
TO TABLE
Worktable1.
STEP 2
The type of query is SELECT.
This step involves sorting.
FROM TABLE
Worktable1.
Using GETSORTED
Table Scan.
Forward Scan.
Positioning at start of table.
Using I/O Size 8 Kbytes for data pages.
With MRU Buffer Replacement Strategy for data pages.


Код: sql
1.
select @@version


Adaptive Server Enterprise/15.0.3/EBF 19956 ESD#4.1/P/NT (IX86)/Windows 2003/ase1503/2782/32-bit/OPT/Tue Jun 12 23:37:46 2012
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930939
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SortSybASE,

Using Clustered Index.
Index : XPKTest1
а это что по вашему?
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930956
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cherrex_Den,
что угодно, но не использование индекса для сортировки.

как видно из описания, оно создает временную таблицу для сортировки

Worktable1 created, in allpages locking mode, for ORDER BY.

на реальных данных(~600 тысяч строк) из-за этой лишней операции происходит переполнение tempdb
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930968
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SortSybASE,

я бы попробовал следующее:
1) убрать null из полей таблицы
2) явно указать порядок сортировки полей при создании индекса
3) накатить последний ebf или взять последнюю версию 15.5 - есть сильно ненулевая вероятность отсебятины ASE ранних версий 15-шки
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930971
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

1) таблица стейджинговая, наполняется данными во время работы отчета. сначала частью, затем обогащается.
2) пробовал, не помогает.
3) сервер чужой, не получится...
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930983
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SortSybASEkomrad,

1) таблица стейджинговая, наполняется данными во время работы отчета. сначала частью, затем обогащается.
2) пробовал, не помогает.
3) сервер чужой, не получится...

а order by убрать?
кластерный индекс и так позволит получить данные в порядке ключа индекса
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930987
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,

в данный момент за отсутствием других способов так и сделано, потому как иначе отчет вообще не строится.
но не хотелось бы отдавать данную операцию на откуп серверу, мало ли что ему в очередной раз взгрустнется?
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930989
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SortSybASEkomrad,

в данный момент за отсутствием других способов так и сделано, потому как иначе отчет вообще не строится.
но не хотелось бы отдавать данную операцию на откуп серверу, мало ли что ему в очередной раз взгрустнется?

ясно

а с некластерным индексом поведение аналогично?
а скорость построения отчета?
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930993
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SortSybASE
на реальных данных(~600 тысяч строк) из-за этой лишней операции происходит переполнение tempdb

а размер tempdb какой?
таблица не широкая, размер записи мал, 600 тысяч не большое кол-во ...
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37930999
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradа с некластерным индексом поведение аналогично?
а скорость построения отчета?
неклсатерным создавал его изначально. когда не помогло - попробовал сделать кластерным.
отчет тяжелый, строится долго. полчаса-час.

на деле таблица заметно шире представленной, и сортировка там идет по 7 полям.
но проблема с планом запроса воспроизводится на любом количестве полей и записей, разве что темпдб не переполняется...
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37931027
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SortSybASEkomradа с некластерным индексом поведение аналогично?
а скорость построения отчета?
неклсатерным создавал его изначально. когда не помогло - попробовал сделать кластерным.
отчет тяжелый, строится долго. полчаса-час.
на деле таблица заметно шире представленной, и сортировка там идет по 7 полям.

кластерный по 7-ми полям строится на пустой таблице, так?


SortSybASEно проблема с планом запроса воспроизводится на любом количестве полей и записей, разве что темпдб не переполняется...
полагаю, что это особенность ранних версий 15-шки
не зря после esd 4.1 идет сразу 15.5

вот например классная ошибка:
When the ASE ESD number is not an integer (e.g. 1.1, 4.1 or 5.1 etc), then anything using the sp_versioncrack stored procedure (e.g. sp_spaceusage) may encounter a 249 error (conversion error).


а чему равно

Код: sql
1.
sp_configure "optimizer level"
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37931298
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komradкластерный по 7-ми полям строится на пустой таблице, так?

ага

Код: sql
1.
sp_configure "optimizer level"



Parameter NameDefaultMemory UsedConfig ValueRun ValueUnitTypeoptimizer levelase_default 0ase_defaultase_defaultnumberdynamic
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37932503
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SortSybASE,

А нафига вообще что-то сортировать на сервере?
ORDER BY это на мой взгляд вообще не нужная вещь. То есть совсем не нужная.
Всю сортировку надо делать на клиенте.
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37932546
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlА нафига вообще что-то сортировать на сервере?

а также, для чего на серверной стороне обработка XML, к чему вообще создан процедурный подход, кто придумал курсоры и много других философских вопросов...

Если по теме - то клиентская часть подлежит настройке, но не доработке.
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37932560
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SortSybASEWhite OwlА нафига вообще что-то сортировать на сервере?

а также, для чего на серверной стороне обработка XML, к чему вообще создан процедурный подход, кто придумал курсоры и много других философских вопросов...Твои философские вопросы ехидны. Мой реален.

SortSybASEЕсли по теме - то клиентская часть подлежит настройке, но не доработке.Именно что настройке.
Если ты на сервере делаешь сортировку по возрастанию алфавита, а клиент хочет обратную сортировку или вообще сортировать по другому полю? Ты будешь сортировать дважды? Сначала на сервере, потом на клиенте? Ну-ну...
Да еще и объемы в 600 тысяч строк...

Так я повторяю свой вопрос: Нафига сортировать на сервере? Какой реальный выигрыш ты надеешься получить от решения своей задачи?
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37932565
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

все мои ехидные вопросы периодически всплывают в качестве ответов.

Снова по теме. представьте себе "черный ящик", на вход которого требуется подать отсортированный поток данных. Это будет практически то, что есть в данном случае.
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37932751
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> CREATE TABLE dbo.test1
> (
> int1INT NULL,
> numb1numeric(10) NULL,
> int2INT NULL,
> vchar1varchar(10),
> )


Схема блокирования таблицы какая ?
Если DOL, то таблица реально не сортирована по этому
ключу и соответственно не может быть поводом для оптимизации ORDER BY.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37933103
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,
каюсь, грешен, пока не знаю как посмотреть.
но по идее вроде заявлено, что при попадании в индекс сервер должен им пользоваться для сортировки.
и в требованиях стоит только чтоб он был покрывающим и порядок сортировки был либо прямой, либо обратный.

даже кластеризованным он быть не обязан. Кластеризованным я его сделал, чтобы убрать order by совсем.
Но, как Вы заметили, при схеме DOL физический порядок строк не гарантируется...
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37933491
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SortSybASE,

Нет, все правильно! Индекс должен использоваться.
ASE 15.7 ESD#2

Есть уникальный не кластерный индекс по полям которые в order by(порядок тотже)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
*
from crg_specification
order by 
railcar, 
waybill, 
certificate, 
order_position,
certificate_num, 
shipper_code, 
order_num, 
is_del



планQUERY PLAN FOR STATEMENT 1 (at line 1).
Optimized using Parallel Mode


STEP 1
The type of query is SELECT.

1 operator(s) under root

|ROOT:EMIT Operator (VA = 1)
|
| |SCAN Operator (VA = 0)
| | FROM TABLE
| | crg_specification
| | Index : uniq_spec_itm
| | Forward Scan.
| | Positioning at index start.
| | Using I/O Size 64 Kbytes for index leaf pages.
| | With LRU Buffer Replacement Strategy for index leaf pages.
| | Using I/O Size 64 Kbytes for data pages.
| | With LRU Buffer Replacement Strategy for data pages.


Так что, проблема в оптимизаторе, или в его настройках.
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37933498
moris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SortSybASE,
>каюсь, грешен, пока не знаю как посмотреть

select case
when sysstat2 & 57344 =8192 then 'Table uses allpages locking scheme.'
when sysstat2 & 57344 =16384 then 'Table uses datapages locking scheme.'
when sysstat2 & 57344 =32768 then 'Table uses datapages locking scheme.'
end
from sysobjects where name='test1'


Во первых, попробуйте обновить статистику.
Если статистика актуальна, то это похоже на баг оптимизатора. При работе с ASE до 15.5 было замечено достаточно много багов в оптимизаторе как в native mode, так и в compatible mode.
Причем с native оптимизатором решать проблемы можно значительно проще используя хотя-бы параметр "optimizer level", или явно настраивая опции оптимизатора.
В вашем случае, судя по плану, используется compatible mode. поэтому никаких "костылей" для устранения такого неоптимального плана не получится использовать.
Проверил у себя на ASE15.5 ESD4 , (таблица содержит 160 000 строк) . Планы ожидаемые, как в родном режиме оптимизатора так и в режиме совместимости

Для compatible mode

FROM TABLE
test1
Nested iteration.
Using Clustered Index.
Index : XPKTest1
Forward Scan.
Positioning at index start.
Index contains all needed columns. Base table will not be read.
Using I/O Size 4 Kbytes for index leaf pages.
With LRU Buffer Replacement Strategy for index leaf pages.
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37933516
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
moris,
спасибо!

Я правда, уже в явном виде пытался пересоздать таблицу с использованием lock allpages. Не помогло.
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37933549
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cherrex_DenSortSybASE,

Нет, все правильно! Индекс должен использоваться.

Правильно, что должен использоваться.

MasterZiv же говорил, видимо об этом(немного выдрано из контекста, но смысл вроде как понятен)
A clustered index on a DOL table is STILL a placement index and
therefore behaves EXACTLY as a clustered index on APL. The only
difference (and all of this is documented) that in the "placement", we
do not escalate locks to strictly enforce order - so the row may be put
at the end of the page, or in the middle of page - where there is space
- or on a new page in same extent - the goal is to place the row NEAR
where it needs to go
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37933643
SortSybASE,

Index contains all needed columns. Base table will not be read.
...

Для данного примера схема блокировки таблицы не важна.
Что APL, что DOL. Это index covered scan.
Кстати кластерным индекс тоже может не быть.

Временная таблица не должна создаваться для index covered scan, если порядок колонок в индексе и направление ASC/DESC совпадают с порядком в order by.
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37933692
SortSybASE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл парольSortSybASE,
Временная таблица не должна создаваться для index covered scan, если порядок колонок в индексе и направление ASC/DESC совпадают с порядком в order by.
Весь вопрос состоит в том, как заставить сервер понять это.

Кластеризованный индекс создал, чтобы убрать конструкцию order by.
но мне такое решение не нравится и видится неверным.
...
Рейтинг: 0 / 0
Использование индекса для сортировки
    #37933772
SortSybASE,

ASE15.5 ESD4
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Использование индекса для сортировки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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