Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.29;
Скачать: CL | DM;

Вниз

MSSQL2000   Найти похожие ветки 

 
Delph ©   (2004-02-02 17:26) [0]

Проблема, как всегда в долгом исполнении запросов.
Имеются 2 связанные таблицы допустим, продацы и их заказы. таблицы НЕ индексированы. У каждого заказа есть время его исполнения.
При старте прога заполняет 3 таблицы (соотв. у меня 3 хранимые процедуры в которые посылается дата за которую, надо отобразить данные):
1. Общее количество заказов (число)время исполнения которых больше даты Х.
2. Имена продавцов и количество их заказов время исполнения которых больше даты Х.
3. Данные о заказах время исполнения которых больше даты Х.

Выборки постоянно идут в зависимости от даты X.
Примерное количество данных - 70 продавцов и 15000 заказов.
Время выполнения - 8 сек. на PIII и от 10 на менее производительных машинах.
Можно-ли сделать быстрее?
Для написания проги, воспользовался компонентами ADO.
примеры хранимых процедур:

2.
CREATE PROCEDURE AllFrm @Date char(10) AS
BEGIN TRANSACTION
INSERT into VAllFrm
SELECT Abr, COUNT(*) AS [Size]
FROM WPlc
WHERE CONVERT(DateTime, WPlc.Dtp, 104) >= CONVERT(DateTime, @Date, 104)
GROUP BY Abr
SELECT WFrm.Nms, WFrm.Abr, WFrm.Kfc,VAllFrm.[Size]
FROM WFrm INNER JOIN
VAllFrm ON WFrm.Abr = VAllFrm.Abr
GROUP BY ALL WFrm.Nms, WFrm.Abr, WFrm.Kfc,VAllFrm.[Size]
UNION
SELECT Nms, Abr, Kfc, 0 AS [Size]
FROM WFrm
WHERE NOT (Abr = ANY
(SELECT Abr
FROM VAllFrm))
ORDER BY WFrm.Nms
Delete from VAllFrm
COMMIT TRANSACTION
GO


Таблица VAllFrm - вспомогательная.
3.
CREATE PROCEDURE AllPlc @Date char(10) AS
SELECT *
FROM WPlc
WHERE (CONVERT(datetime, Dtp, 104) >= CONVERT(datetime,@Date , 104))
ORDER BY St1 DESC,Dks, Nmb DESC
GO


Я новичек во SQL. Буду рад любым советам.


 
Nikolay M. ©   (2004-02-02 17:41) [1]


> таблицы НЕ индексированы

Даже не вдаваясь в детали: почем НЕ индексированы?


 
Delph ©   (2004-02-02 17:47) [2]

А по какому полю прикажете индексировать? Выборка идет по дате. Даты абсолютно разные (каждый день). Я тут почитал - выигрыша не будет.


 
ZrenBy ©   (2004-02-02 18:10) [3]

Даже если будут индексы, при таком


WHERE CONVERT(DateTime,WPlc.Dtp,104)>=CONVERT(DateTime,@Date,104)


поимеете table scan

Никогда так не делай.


 
sniknik ©   (2004-02-03 08:10) [4]

> А по какому полю прикажете индексировать? Выборка идет по дате. Даты абсолютно разные (каждый день). Я тут почитал - выигрыша не будет.
неправильно воспринял то что читал. наоборот максимальный выигрыш индекса на разнородных данных, и нет смысла его делать на однородных, к примеру всего 2 значения на большой обьем. (нерационально, время сохранения увеличено но скорость выборки примерно такая же как без индекса).
перечитай то что читал, наверняка там также написано.
и вот это тоже не лишний совет > ZrenBy © (02.02.04 18:10) [3], советую его придерживатся. ;о)


 
hfa ©   (2004-02-03 08:38) [5]

Используй SDAC и с этими компонентами будет намного быстрее..
www.crlab.com


 
Ega23 ©   (2004-02-03 09:15) [6]

CREATE PROCEDURE AllFrm @Date char(10) AS
А почему @Date не datetime?


 
Nikolay M. ©   (2004-02-03 09:15) [7]


> А по какому полю прикажете индексировать? Выборка идет по
> дате

А тыблицы кто вместо тебя джойнит? И это по неиндексированным полям?
INNER JOIN VAllFrm ON WFrm.Abr = VAllFrm.Abr


 
Delph ©   (2004-02-03 16:23) [8]

Всем спасибо. Понял, что изначально не правильно хранил даты.
Вместо datetime - char[10]. Этот шаг был вызван тем, что пользователь хотел видеть в одной таблице дату в формате дд.мм.гггг, а в другой и вовсе некорректные(недозаполненные) даты(например __.__.2004). Надо было лучше продумать структуру:)


 
Fay ©   (2004-02-03 16:25) [9]

Почему-то никому не приходит в голову хранить незаполненный Int...


 
Ega23 ©   (2004-02-03 16:26) [10]


> Всем спасибо. Понял, что изначально не правильно хранил
> даты.
> Вместо datetime - char[10]. Этот шаг был вызван тем, что
> пользователь хотел видеть в одной таблице дату в формате
> дд.мм.гггг, а в другой и вовсе некорректные(недозаполненные)
> даты(например __.__.2004). Надо было лучше продумать структуру:)

Ты всегда при выборке можешь сделать
Select MyDate=Convert(varchar(10), MyDate, 104) from MyTable


 
Fay ©   (2004-02-03 16:26) [11]

типа 123???321


 
Ega23 ©   (2004-02-03 16:28) [12]


> типа 123???321

Это о чём?


 
Delph ©   (2004-02-03 16:32) [13]

Почему-то никому не приходит в голову хранить незаполненный Int...
Это как?


 
Fay ©   (2004-02-03 17:36) [14]

2Ega23 © (03.02.04 16:28) [12]
2Delph © (03.02.04 16:32) [13]

> а в другой и вовсе некорректные(недозаполненные) даты(например
> __.__.2004).



Страницы: 1 вся ветка

Текущий архив: 2004.02.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
3-93815
Пубертанец
2004-02-02 16:14
2004.02.29
Ошибка при написании триггеров - deadlock


14-94105
Zew
2004-02-07 21:35
2004.02.29
Не ну это вообще


7-94202
smu
2003-12-11 11:39
2004.02.29
Что делает WaitForSingleObject(ProcInfo.hProcess, INFINITE)?


11-93820
Puke Zero
2003-06-13 23:31
2004.02.29
XP Visual Style для GroupBox


7-94196
rus_alexey
2003-12-10 10:54
2004.02.29
Проблема с COM-портом