|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.07.2009, 13:59 | #1 |
Форумчанин
Регистрация: 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... .Как сделать, чтобы он заново считал? |
27.07.2009, 14:26 | #2 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
имеется в виду MS SQL Server?
попробуйте повесить на текстовое поле правильный индекс по 2му вопросу уже обсуждалось несколько раз - генератор/сиквенс/инкремент на то и заводятся чтобы гарантированно не было повторных значений, а для своих задач сохранения непрерывного поля вводите еще одно, которое и будете апдейтить после каждого изменения содержимого таблицы текст ошибки в студию |
27.07.2009, 14:36 | #3 | ||
Форумчанин
Регистрация: 06.01.2009
Сообщений: 340
|
Цитата:
Если запрос выполняется долго, попробуй увеличить это время, для этого есть свойство: Код:
Цитата:
Чтобы считало опять с начала, необходимо изменить тип поля на, скажем, INT, но тогда придется самому при добавлении указывать значение этого поля и следить за его уникальностью. P.S. Чем не устраивает автоинкрементное поле?
Истинный успех – это то, что Вы сделали в сравнении с тем, что могли бы сделать.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник". |
||
28.07.2009, 16:00 | #4 |
Форумчанин
Регистрация: 08.10.2007
Сообщений: 125
|
Да, поле инкрементное и оно же является ключом. Я думал, что оттого что счётчик считает новые записи не с 0 и происходит увеличение времени ожидания.Увеличить время ожидания конечно можно, но разве это нормально? Всё-таки это MS SQL Server а не Access какой-нибудь.Да и записей не очень много.А если записей будет тыщ пятьсот? Это получается минут 10 ждать придётся?
Может что то неправильно делаю при выполнении запроса: AdoQuery.SQL.Text:='текст запроса'; AdoQuery.Active:=true; |
28.07.2009, 17:18 | #5 |
Форумчанин
Регистрация: 28.09.2008
Сообщений: 344
|
Если используешь MS SQL Server 2005 или выше то есть в них полнотекстовые индексы которые индексируют отдельные слова и фразы
|
28.07.2009, 17:37 | #6 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
могу влегкую написать запрос даже на 100 записей, который будет выполняться вечно
может лучше структуру таблиц и сам запрос в студию? |
29.07.2009, 02:05 | #7 |
Форумчанин
Регистрация: 08.10.2007
Сообщений: 125
|
БД содержит всего одну таблицу с полями Int,Text,Char и Data(count,stat,nazv,data).
Запрос: select stat FROM table WHERE stat LIKE '%подстрока%'; |
29.07.2009, 02:05 | #8 |
Форумчанин
Регистрация: 08.10.2007
Сообщений: 125
|
БД содержит всего одну таблицу с полями Int,Text,Char и Data(count,stat,nazv,data).
Запрос: select stat FROM table WHERE stat LIKE '%подстрока%'; |
29.07.2009, 11:45 | #9 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 908
|
простите, а для чего ключевое поле если таблица одна?
|
29.07.2009, 12:37 | #10 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
этот запрос
Код:
если есть возможность облегчить участь сервака, то стоит этой возможностью воспользоваться 1) добавить (если такое допустимо) доп.критерии в фильтр отбора, чтобы сократить просматриваемый список 2) завести такое новое поле (например, поле, в которое при вставке будет попадать текст из поля stat в верхнем регистре + индекс на поле) 3) попробовать переписать условие WHERE stat LIKE '%подстрока%' и разбить его на несколько - ибо серваку намного легче было бы найти строки WHERE stat LIKE 'подстрока%' или WHERE stat LIKE '%подстрока' |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Доступ к БД (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 |