|
|
|
Supreme Being
      
администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421,
Visits: 49 251
|
|
Начал замечать, что иногда появляются проблемы с поиском по БД на данном сайте, особенно когда выбираешь поиск по БД, SQL Server возвращает таймаут при выполнении запроса... Обычно все вроде бы работает, но иногда, видимо, когда сервер провайдера перегружен или еще что, выдает этот таймаут. Запрос уже обсуждался на этом форуме
http://www.relib.com/forums/topic.asp?id=736362
решение мне понравилось и его и включили в скрипт поиска...
Таблица такая:
CREATE TABLE forum ( [ID] [int] IDENTITY (1, 1) NOT NULL , [member] [int] NOT NULL , [topic] [nvarchar] (100) COLLATE Cyrillic_General_CI_AS NULL , [date] [smalldatetime] NULL , [parentID] [int] NOT NULL , [message] [ntext] COLLATE Cyrillic_General_CI_AS NOT NULL , [updated] [smalldatetime] NULL , [type] [int] NOT NULL , [ip] [nvarchar] (50) COLLATE Cyrillic_General_CI_AS NULL , [status] [char] (1) COLLATE Cyrillic_General_CI_AS NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
к ней сделаны primary key на ID asc (clustered) и индекс по topic,updated,status - все asc
Запрос выполняется примерно следующий
SELECT DISTINCT t1.id, t1.topic, substring(t1.message,1,200), t1.updated, m.name FROM member m, forum T1 Inner Join forum T2 On T1.Id = T2.ParentId WHERE T1.ParentId = 0 AND ( (t1.topic like '%xxx%' OR t1.message like '%xxx%') ) AND m.id=t1.member ORDER BY t1.updated DESC
Заранее благодарю.
|
|
|
|
|
Supreme Being
      
администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421,
Visits: 49 251
|
|
а еще после 5-7 "удачных" запросов только что получил следующий ответ от сервера:
Microsoft OLE DB Provider for SQL Server error '80004005'
Transaction (Process ID 101) was deadlocked on {lock} resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
???
|
|
|
|
|
Supreme Being
      
участник
Last Login: 13.02.2002 12:46
Сообщ.: 266,
Visits: 2 927
|
|
Попробуйте так
SELECT DISTINCT t1.id, t1.topic, substring(t1.message,1,200), t1.updated, m.name FROM member m, forum T1 WITH (NOLOCK) Inner Join forum T2 WITH (NOLOCK) On T1.Id = T2.ParentId WHERE T1.ParentId = 0 AND ( (t1.topic like '%xxx%' OR t1.message like '%xxx%') ) AND m.id=t1.member ORDER BY t1.updated DES
|
|
|
|
|
Supreme Being
      
администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421,
Visits: 49 251
|
|
изменил. вроде работает. пока :-)
спасибо за ответ
|
|
|
|