Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос TOP 99 PERCENT выполняется за секунду, а TOP 100 - висит  [new]
Bryk_Alien
Guest
Здраствуйте, столкнулся с такой проблемой...

Делал запрос в Энтерпрайзе. Когда вставил в Query Analyzer, то результата не дождался (> 4х минут).

Причём если я добавляю инструкцию SELECT TOP 99 PERCENT - запрос сразу выводит 22000 записей из 22250, практически моментально. А обычный SELECT или SELECT TOP 100 PERCENT запрос висит и висит...

Может кто подскажет, с чем это связано?

SELECT  TOP 99 PERCENT  
	dbo.tblReceipt_tmp.ReceiptID, 
	dbo.tblCustomers.RecordID, 
	dbo.tblReceipt_tmp.Customer, 
	dbo.tblReceipt_tmp.DateCreated, 
	T_ChekCreated.EmployeeID AS UserCreatedID, 
	dbo.tblReceipt_tmp.ReceiptSum, 
	tblEmployees_1.EmployeeID AS Employee
FROM         
	dbo.tblReceipt_tmp LEFT OUTER JOIN
	dbo.tblEmployees tblEmployees_1 ON dbo.tblReceipt_tmp.Employee = tblEmployees_1.LastName LEFT OUTER JOIN
	dbo.tblCustomers ON dbo.tblReceipt_tmp.CustomerID = dbo.tblCustomers.CustomerID LEFT OUTER JOIN
	dbo.tblEmployees T_ChekCreated ON dbo.tblReceipt_tmp.UserCreated = dbo.fnGetFIO(T_ChekCreated.LastName, T_ChekCreated.FirstName, '')
WHERE     
	(dbo.tblCustomers.RecordID <> 7321696)
ORDER BY 
	dbo.tblReceipt_tmp.ReceiptID
23 дек 11, 14:09    [11815089]     Ответить | Цитировать Сообщить модератору
 Re: Запрос TOP 99 PERCENT выполняется за секунду, а TOP 100 - висит  [new]
Bryk_Alien
Guest
Проблема возникает, если в запросе есть поле dbo.tblReceipt_tmp.Customer, почему - буду выяснять...
23 дек 11, 14:16    [11815172]     Ответить | Цитировать Сообщить модератору
 Re: Запрос TOP 99 PERCENT выполняется за секунду, а TOP 100 - висит  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Статистику уже обновили и планы проанализировали?
23 дек 11, 14:20    [11815233]     Ответить | Цитировать Сообщить модератору
 Re: Запрос TOP 99 PERCENT выполняется за секунду, а TOP 100 - висит  [new]
Bryk_Alien
Guest
Планы я ни разу не анализировал, но посмотрел - они такие. Может, кто подскажет в чём дело...

Для TOP 99:

К сообщению приложен файл. Размер - 48Kb
23 дек 11, 14:44    [11815507]     Ответить | Цитировать Сообщить модератору
 Re: Запрос TOP 99 PERCENT выполняется за секунду, а TOP 100 - висит  [new]
Bryk_Alien
Guest
Для TOP 100:

К сообщению приложен файл. Размер - 72Kb
23 дек 11, 14:45    [11815518]     Ответить | Цитировать Сообщить модератору
 Re: Запрос TOP 99 PERCENT выполняется за секунду, а TOP 100 - висит  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Bryk_Alien,
PRINT @@VERSION
???
23 дек 11, 15:16    [11815826]     Ответить | Цитировать Сообщить модератору
 Re: Запрос TOP 99 PERCENT выполняется за секунду, а TOP 100 - висит  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Bryk_Alien
Здраствуйте, столкнулся с такой проблемой...

Делал запрос в Энтерпрайзе. Когда вставил в Query Analyzer, то результата не дождался (> 4х минут).

Причём если я добавляю инструкцию SELECT TOP 99 PERCENT - запрос сразу выводит 22000 записей из 22250, практически моментально. А обычный SELECT или SELECT TOP 100 PERCENT запрос висит и висит...

Может кто подскажет, с чем это связано?

SELECT  TOP 99 PERCENT  
	dbo.tblReceipt_tmp.ReceiptID, 
	dbo.tblCustomers.RecordID, 
	dbo.tblReceipt_tmp.Customer, 
	dbo.tblReceipt_tmp.DateCreated, 
	T_ChekCreated.EmployeeID AS UserCreatedID, 
	dbo.tblReceipt_tmp.ReceiptSum, 
	tblEmployees_1.EmployeeID AS Employee
FROM         
	dbo.tblReceipt_tmp LEFT OUTER JOIN
	dbo.tblEmployees tblEmployees_1 ON dbo.tblReceipt_tmp.Employee = tblEmployees_1.LastName LEFT OUTER JOIN
	dbo.tblCustomers ON dbo.tblReceipt_tmp.CustomerID = dbo.tblCustomers.CustomerID LEFT OUTER JOIN
	dbo.tblEmployees T_ChekCreated ON dbo.tblReceipt_tmp.UserCreated = dbo.fnGetFIO(T_ChekCreated.LastName, T_ChekCreated.FirstName, '')
WHERE     
	(dbo.tblCustomers.RecordID <> 7321696)
ORDER BY 
	dbo.tblReceipt_tmp.ReceiptID
Выделенное безобразие будет портить жизнь всё время.
Либо выбросить скалярную функцию, либо переделать её в табличную inline
23 дек 11, 15:20    [11815855]     Ответить | Цитировать Сообщить модератору
 Re: Запрос TOP 99 PERCENT выполняется за секунду, а TOP 100 - висит  [new]
Bryk_Alien
Guest
iap
PRINT @@VERSION
Microsoft SQL Server  2000 - 8.00.2055 (Intel X86) 
Dec 16 2008 19:46:53
Copyright (c) 1988-2003 Microsoft Corporation
Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)


По поводу выделенного...

Я переношу данные из аксессной таблицы на SQL. Там создатели таблицы сделали текстовое поле (для определения кто создал запись). Я хочу вместо текстового поля использовать код сотрудника. Для того чтоб связать поэтому полю - использую эту функцию.
Мне нужно написать DTS для переноса данных в будущем, которое произойдёт один, может пару раз, поэтому высоко быстродействия не требуется.

Причём, непонятно, почему с этой же функцией 22000 строк он выводит за 0,5 с, а 22200 больше 4 минут.
23 дек 11, 15:35    [11816032]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить