Скорость загрузки таблиц...

sergei.knyazev
Дата: 05.04.2005 23:41:24
У меня сложилась такая ситуация.

Есть две таблицы на MSDE2000. В каждой по 5000 записей.
одна и таже постейшая процедура Fill занимает разное время. Причем одна таблица филится примерно 3 секунды, другая же 1 минуту. Причём по объему данных, как это не парадоксально, больше более скоростная таблица. судите сами.

Медленная:
CREATE TABLE [ArticleFragmentation] (
[ArticleNumber] [int] NOT NULL ,
[Drug_id] [int] NOT NULL ,
[Checked] [int] NULL ,
[EntDate] [smalldatetime] NULL ,
CONSTRAINT [PK_ArticleFragmentation] PRIMARY KEY CLUSTERED
(
[ArticleNumber],
[Drug_id]
) ON [PRIMARY]
) ON [PRIMARY]
GO


Быстрая:
CREATE TABLE [ArticleProperties] (
[ArticleNumber] [int] NOT NULL ,
[PropertyName] [varchar] (50) COLLATE Cyrillic_General_CI_AS NOT NULL ,
[ImageProperty] [image] NULL ,
[IntProperty] [int] NULL ,
[StringProperty] [varchar] (300) COLLATE Cyrillic_General_CI_AS NULL ,
[DecimalProperty] [decimal](18, 0) NULL ,
[DatetimeProperty] [smalldatetime] NULL ,
[PropertyType] [int] NOT NULL ,
[EntDate] [smalldatetime] NOT NULL ,
CONSTRAINT [PK_ArticleProperties] PRIMARY KEY CLUSTERED
(
[ArticleNumber],
[PropertyName]
) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO


Почему так?
sergei.knyazev
Дата: 06.04.2005 00:30:19
По ходу дела выяснилось, что скорость напрямую зависит от последовательности. те. та таблица, что филится первой делает это значительно медленней второй.
Совсем всё стало хорошо, когда перед ними обоими я поставил фил совсем маленькой таблицы (500 строк). Теперь всё филиться на ура.

Что это было?
Sa
Дата: 06.04.2005 18:30:06
sergei.knyazev

Что это было?

чтобы сказать что это было надо смотреть код.
У меня предположение что первый Fill открывал соединение, а второй использовал уже соединение из пула.

uid = Sa
sergei.knyazev
Дата: 07.04.2005 12:54:43
Sa
sergei.knyazev

Что это было?

чтобы сказать что это было надо смотреть код.
У меня предположение что первый Fill открывал соединение, а второй использовал уже соединение из пула.

uid = Sa


Соединение у меня одно на всех. Я его открываю в начале и закрываю в конце.

Что такое пул?
Sa
Дата: 07.04.2005 18:23:37
надо смотреть код....


Что такое пул?

а это что вы могли бы использовать... см. MSDN connection pool
Специально управлять им как правило не надо, вы просто в нужном месте открываете и закрываете соединение, а не держите постоянно открытое соединение.

uid = Sa
sergei.knyazev
Дата: 08.04.2005 10:40:29
Что мне это даст если у меня MSDE2000 на одном компе и приложение на нём же?
sergei.knyazev
Дата: 08.04.2005 10:43:18
Неподскажите ли вы почему, даже если я, допустим, сам того не зная использвал connection pool и соединение бралось именно из него был такой разрыв в скорости и главное, почему всё изменилось от перемены мест слагаемых?
Sa
Дата: 08.04.2005 20:33:48

Неподскажите ли вы почему, даже если я, допустим, сам того не зная использвал connection pool и соединение бралось именно из него был такой разрыв в скорости и главное, почему всё изменилось от перемены мест слагаемых?


вы пробовали написать тестовое приложение, посмотреть профайлером какие запросы идут к БД, попробовать исполнить свои запросы в не ADO.NET.

uid = Sa
sergei.knyazev
Дата: 08.04.2005 20:47:59
Да, конечно. Всё летает. Профайлер показыкает что идёт Select к той самой таблице.
Sa
Дата: 08.04.2005 23:10:23

Да, конечно. Всё летает.

Это к чему относится?
к тестовому приложению?

uid = Sa