Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2009, 13:59   #1
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию увеличение времени ожидания ответа от SQL Server

Здравствуйте.Вот столкнулся с такой проблемой:
В СУБД SQL Server имеется таблица с полями Int,Text,Char и Data.Каждый месяц добавляется около 20000 записей.
Вопрос:
1)К таблице делается запрос на поиск слов в поле Text. При количестве записей > 70000 увеличивается время ожидания ответа от сервера(использую AdoQuery.Active:=true), и соответственно вылетает ошибка.Почему? Однако при количестве записей около 30000 всё нормально. Вроде не должно так быть, всё -таки SQL Server предназначена для работы с большими объёмами данных.
2)при удалении старых записей счётчик int продолжает считать дальше, т.е было записей 1000, 500 удалили, а он продолжает считать 1001,1002,1003... .Как сделать, чтобы он заново считал?
furstenberg вне форума Ответить с цитированием
Старый 27.07.2009, 14:26   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от furstenberg Посмотреть сообщение
В СУБД SQL Server
имеется в виду MS SQL Server?

попробуйте повесить на текстовое поле правильный индекс

по 2му вопросу уже обсуждалось несколько раз - генератор/сиквенс/инкремент на то и заводятся чтобы гарантированно не было повторных значений, а для своих задач сохранения непрерывного поля вводите еще одно, которое и будете апдейтить после каждого изменения содержимого таблицы

Цитата:
Сообщение от furstenberg Посмотреть сообщение
(использую AdoQuery.Active:=true), и соответственно вылетает ошибка.Почему?
текст ошибки в студию
soleil@mmc вне форума Ответить с цитированием
Старый 27.07.2009, 14:36   #3
Daramant
Форумчанин
 
Регистрация: 06.01.2009
Сообщений: 340
По умолчанию

Цитата:
и соответственно вылетает ошибка.Почему?
Исключение вылетает из-за того, что превышено время ожидания.
Если запрос выполняется долго, попробуй увеличить это время, для этого есть свойство:
Код:
ADOQuery1.CommandTimeout := 30; // 30 по умолчанию
Цитата:
при удалении старых записей счётчик int продолжает считать дальше, т.е было записей 1000, 500 удалили, а он продолжает считать 1001,1002,1003... .Как сделать, чтобы он заново считал?
Если поле автоинкрементное (счетчик), то оно и будет постоянно увеличиваться. Автоинкрементным обычно делаю ключ, таким образом поддерживается уникальность ключей в БД.

Чтобы считало опять с начала, необходимо изменить тип поля на, скажем, INT, но тогда придется самому при добавлении указывать значение этого поля и следить за его уникальностью.

P.S. Чем не устраивает автоинкрементное поле?
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Daramant вне форума Ответить с цитированием
Старый 28.07.2009, 16:00   #4
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию

Да, поле инкрементное и оно же является ключом. Я думал, что оттого что счётчик считает новые записи не с 0 и происходит увеличение времени ожидания.Увеличить время ожидания конечно можно, но разве это нормально? Всё-таки это MS SQL Server а не Access какой-нибудь.Да и записей не очень много.А если записей будет тыщ пятьсот? Это получается минут 10 ждать придётся?
Может что то неправильно делаю при выполнении запроса:
AdoQuery.SQL.Text:='текст запроса';
AdoQuery.Active:=true;
furstenberg вне форума Ответить с цитированием
Старый 28.07.2009, 17:18   #5
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Если используешь MS SQL Server 2005 или выше то есть в них полнотекстовые индексы которые индексируют отдельные слова и фразы
s.Creator вне форума Ответить с цитированием
Старый 28.07.2009, 17:37   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

могу влегкую написать запрос даже на 100 записей, который будет выполняться вечно
может лучше структуру таблиц и сам запрос в студию?
soleil@mmc вне форума Ответить с цитированием
Старый 29.07.2009, 02:05   #7
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию

БД содержит всего одну таблицу с полями Int,Text,Char и Data(count,stat,nazv,data).
Запрос:
select stat FROM table WHERE stat LIKE '%подстрока%';
furstenberg вне форума Ответить с цитированием
Старый 29.07.2009, 02:05   #8
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию

БД содержит всего одну таблицу с полями Int,Text,Char и Data(count,stat,nazv,data).
Запрос:
select stat FROM table WHERE stat LIKE '%подстрока%';
furstenberg вне форума Ответить с цитированием
Старый 29.07.2009, 11:45   #9
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

простите, а для чего ключевое поле если таблица одна?
фЁдОр вне форума Ответить с цитированием
Старый 29.07.2009, 12:37   #10
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

этот запрос
Код:
select stat FROM table WHERE stat LIKE '%подстрока%'
заставляет сервак просматривать всю таблицу целиком

если есть возможность облегчить участь сервака, то стоит этой возможностью воспользоваться
1) добавить (если такое допустимо) доп.критерии в фильтр отбора, чтобы сократить просматриваемый список
2) завести такое новое поле (например, поле, в которое при вставке будет попадать текст из поля stat в верхнем регистре + индекс на поле)
3) попробовать переписать условие
WHERE stat LIKE '%подстрока%'
и разбить его на несколько - ибо серваку намного легче было бы найти строки WHERE stat LIKE 'подстрока%' или WHERE stat LIKE '%подстрока'
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступ к БД (SQL server) в ОС Windows server 2003 Mann SQL, базы данных 2 07.12.2008 19:15
C# + SQl server kommunist Общие вопросы .NET 0 24.07.2008 21:09
MS SQL Server AlexDoul БД в Delphi 3 22.11.2007 09:33
MS sql server 2000 Domovoy SQL, базы данных 1 29.10.2007 10:37
SQL Server+Delphi7 ГОСЕАН БД в Delphi 2 04.05.2007 15:32