#sql #sql-server #sql-execution-plan
Вопрос:
У меня есть простой запрос на левое соединение, подобный этому
select o.orderreference, c.FirstName ' ' c.LastName as Customer, c.phone as CustomerPhoneNumber, case when(isjson(c.metafields) gt; 0) then JSON_VALUE(c.metafields,'$.BaseLocation') else '' end BaseLocation, case when(isjson(c.metafields) gt; 0) then JSON_VALUE(c.metafields,'$.CostCenter') else '' end CostCenter, c.email as Email, c.AcceptsMarketing, outlets.Name outletname, registers.name registername, concat(concat(users.firstname,' '), users.LastName) cashiername, concat(concat(ser.firstname,' '), ser.LastName) servername from orders o with(index(test)) left join customers c on o.CustomerId = c.CustomerId left join users on users.UserId = o.CashierId left join users ser on ser.UserId = o.serverid left join outlets on outlets.outletid = o.OutletId left join registers on registers.RegisterId = o.RegisterId where orderdate between '2019-07-01' and '2019-07-30'
и в результате выполнения плана есть сортировка, когда заказы поступают клиентам. Я хочу, чтобы план выполнения не нуждался в сортировке, есть ли какое-либо решение / почему там есть сортировка?
Вот тест индекса
create nonclustered index test on orders ([orderdate]) include ( [customerid], [OutletId],[OrderNumber],[OrderReference],[ServerId],[CashierId],[RegisterId])
Комментарии:
1. покажите свой
test
индекс2. @RoMEoMusTDiE Я отредактировал свой вопрос, добавив тест индекса
3. @AlwaysLearning Я отредактировал индекс
test
, добавил идентификатор клиента в поле «Включить», заказ стал поиском по индексу, а затем все еще сортировал перед присоединением к таблице «Клиенты».4. Тестовый индекс отсортирован по
orderdate
, остальные столбцы включены в листовые данные, но не являются частью ключа индекса. Избегает ли он узла сортировки, если вместо этого вы индексируете([orderdate], [customerid])
вместо этого?5. «почему там есть род»? Потому что SQL Server решил выполнить объединение слиянием, и для этого требуется, чтобы входные данные были отсортированы по ключу. Одна сторона уже отсортирована, но ей нужно отсортировать другую