Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.05 c
14-94147
Pavel
2004-02-08 17:14
2004.02.29
Windows messages


1-93891
Alex_rar
2004-02-18 14:09
2004.02.29
Создание картинок


6-94087
S@shka
2003-12-25 13:21
2004.02.29
Как правильно??? TClientSocket


6-94076
Yaro
2003-12-23 04:54
2004.02.29
Сетевые девайсы и их адреса...


1-94000
DimonNew
2004-02-17 10:12
2004.02.29
Динамические массивы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский