Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сортировка  [new]
Nick2004
Member

Откуда: Kiev
Сообщений: 28
Есть таблица

CREATE TABLE [dbo].[docs] (
[Docs_Id] [int] IDENTITY (1, 1) NOT NULL ,
[Docs_InventNum] [nvarchar] (20),
[Docs_Nomenclature] [nvarchar] (50) NULL ,
[Docs_NomenclatureAppliedDoc] [nvarchar] (50) ,
[Docs_Name] [nvarchar] (1024),
[Docs_Redaction] [nvarchar] (3) ,
[Docs_ReestrationDate] [datetime] NULL ,....
)


Есть запрос

select
Docs_Id, Docs_InventNum, Docs_Nomenclature,
Docs_NomenclatureAppliedDoc, Docs_Name,
Docs_Redaction, Docs_ReestrationDate,
Docs_Energoblock, Buildings_Name, BuildTypes_Name, DesignStage_Name,
DocsMark_Name, DocTypes_Name, Specialisations_Name,
Object_Name, did, sort
from
(select top 50 * from
(select top 15000 docs_id as did,Docs_Name as sort
from docs
order by sort asc
) as t order by sort desc
) as t2
INNER JOIN
docs on did=docs.docs_id
LEFT OUTER JOIN
Buildings ON Docs_BuildingId_Building = Buildings.Buildings_id LEFT OUTER JOIN
BuildTypes ON Docs_BuildTypesId_BuildTypes = .....
order by sort asc


Выполняется 5 секунд,
если вместо Docs_Name любое другое поле, то 0.5 секунд
Еще проблема в том, что Docs_Name может быть практически одинаковым и различаться последними символами
Можно ли как-то соптимизировать это дело?
30 апр 04, 13:53    [659646]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Nick2004
Member

Откуда: Kiev
Сообщений: 28
Уточнение Docs_name as sort
30 апр 04, 13:58    [659664]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А индекс на Docs_Name есть?
30 апр 04, 13:58    [659668]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
from

(select top 50 * from
(select top 15000 docs_id as did,Docs_Name as sort
from docs
order by sort asc
) as t order by sort desc
) as t2


Вот это вот убей не пойму зачем.
30 апр 04, 14:00    [659675]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Nick2004
Member

Откуда: Kiev
Сообщений: 28
pkarklin :Разбитие на страницы с сортировкой
tpg: размер поля для индекса не может привышать 900 байт
30 апр 04, 14:05    [659689]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Разбитие на страницы с сортировкой


https://www.sql.ru/faq/faq_topic.aspx?fid=105
30 апр 04, 14:07    [659699]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
автор
tpg: размер поля для индекса не может привышать 900 байт

Угу, уже заметил (не внимательно структуру таблицы просмотрел)...
Ну, а теперь в план посмотри, какая операция жрет ресурсы.
30 апр 04, 14:13    [659714]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Nick2004
Member

Откуда: Kiev
Сообщений: 28
tpg:Именно сортировка по docs_name и жрет, если любое другое поле (см внешний селект, то летает)


Иными словами проблема с сортировкой по большому текстовому полю со многими практически одинаковыми значениям
30 апр 04, 14:47    [659815]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Glory
Member

Откуда:
Сообщений: 104760
Иными словами проблема с сортировкой по большому текстовому полю со многими практически одинаковыми значениям
Значит надо для каждого значения этого столбца сгенерировать какой-то вес на основе значения.Желательно числовой. И построить индекс по этому весу.
30 апр 04, 14:57    [659855]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить