Форум: "Базы";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c