Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
Выполняю:
SELECT IdNom FROM Word_Fine WHERE (Kod = 1010006101) - нормально

Выполняю:
SELECT IdNom FROM Word_Fine WHERE Contains(Znach, '"бухгал*"') - нормально

Выполняю:
SELECT IdNom FROM Word_Fine WHERE (Kod = 1010006101) AND ( Contains(Znach, '"бухгал*"')) - висит без признаков жизни

Вопрос: В чем может быть причина, или чего я не догоняю?
17 сен 12, 01:27    [13173522]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Super_cherry,

Давайте рассуждать здраво. Гадать могут или цыганки на вокзале, или лечащие врачи о причине смерти пациента до его вскрытия. А в инженерном деле нет места мистике, все предельно просто.
Вставьте все 3 запроса в студию SSMS, нажмите волшебную кнопочку "показать предполагаемый план выполнения" и выложите сюда все 3 скриншота. А затем выложите список индексов, которые есть в таблице Word_Fine, из каких столбцов они состоят.
Предполагаю, что есть индекс по полю Kod, есть индекс по полю Znach, нет индекса по 2 полям сразу, а таблица большая по размеру.
Возможно, оба индекса включают столбец IdNom как include поле, возможно, по IdNom есть кластерный индекс.
Следовательно - приведите количество строк "exec sp_spaceused Word_Fine", а также результаты запросов "select count(distinct Kod) from Word_Fine" и "select count(distinct Znach) from Word_Fine" и ответьте, есть ли кластерный индекс в таблице.
И вот когда таблица будет рассмотрена под микроскопом со всех сторон - форумчане найдут простой логичный ответ вместо гадания на кофейной гуще. Удачи.
17 сен 12, 01:48    [13173559]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Andy_OLAP
Super_cherry,

Давайте рассуждать здраво. Гадать могут или цыганки на вокзале, или лечащие врачи о причине смерти пациента до его вскрытия. А в инженерном деле нет места мистике, все предельно просто.
Вставьте все 3 запроса в студию SSMS, нажмите волшебную кнопочку "показать предполагаемый план выполнения" и выложите сюда все 3 скриншота...
Только пожалуйста не надо планы скриншотами, ок? Тут не форум художников, картинки не интересны. Есть замачательная возможность сохранять планы как XML в формате sqlplan.
17 сен 12, 04:37    [13173656]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Mind
Есть замачательная возможность сохранять планы как XML в формате sqlplan.
И ещё нужно выложить результат select @@version - поведение полнотекстового поиска на разных версиях очень сильно отличается.
17 сен 12, 08:49    [13173809]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
alexeyvg, Andy_OLAP, Mind

Microsoft SQL Server 2005 - 9.00.5057.00 (X64) Mar 25 2011 13:33:31 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)

есть индекс по полю Kod, есть индекс по полю Znach, кластерный по полю IdNom

select count(distinct Kod) from Word_Fine
- 32

предполагаемый план выполнения

SELECT IdNom FROM Word_Fine WHERE (Kod = 1010006101)


Сорри не могу прикрепить все файлы, поэтому по одному

К сообщению приложен файл (Plan_Kod.sqlplan - 2Kb) cкачать
17 сен 12, 17:09    [13177712]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
продолжаю...

SELECT IdNom FROM Word_Fine WHERE  ( Contains(Znach, '"бух*"'))


К сообщению приложен файл (Plan_Znach.sqlplan - 3Kb) cкачать
17 сен 12, 17:11    [13177726]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
и напоследок...

SELECT IdNom FROM Word_Fine WHERE (Kod = 1010006101) AND ( Contains(Znach, '"бух*"'))


К сообщению приложен файл (Plan_All.sqlplan - 8Kb) cкачать
17 сен 12, 17:13    [13177738]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Super_cherry,

а индекс по полю Znach - полнотекстовый?
Это я к тому, что структура таблицы до сих пор неизвестна.
17 сен 12, 17:15    [13177759]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
iap,

Да индекс полнотекстовый
Попробую кинуть структуру
17 сен 12, 17:38    [13177940]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
CREATE TABLE [dbo].[Word_Fine](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Date_Iz] [datetime] NULL,
	[Men_Iz] [int] NULL,
	[Kod] [int] NULL,
	[CompName] [varchar](200) NULL,
	[IdNom] [int] NULL,
	[IdZap] [int] NULL,
	[Znach] [text] NULL,
	[Tip_Iz] [int] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
17 сен 12, 17:43    [13177979]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Super_cherry
Выполняю:
SELECT IdNom FROM Word_Fine WHERE (Kod = 1010006101) - нормально

Выполняю:
SELECT IdNom FROM Word_Fine WHERE Contains(Znach, '"бухгал*"') - нормально
Скажите, а сколько записей возвращают эти 2 запроса?
17 сен 12, 18:59    [13178489]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
alexeyvg,

Один порядка 16000, второй около 30000.
А в чем тонкость?
17 сен 12, 19:10    [13178508]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
Super_cherry,

сорри второй 300000
17 сен 12, 19:10    [13178511]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Super_cherry
А в чем тонкость?
План конечно плохой :-(
Выбирается 16000 записей, а потом делается 16000 раз полнотекстовый поиск...

Надо бы хоть статистику обновить для этой таблицы, может поможет...

Ещё вариант - переделать запрос на CONTAINSTABLE:
SELECT w.IdNom 
FROM Word_Fine w
	JOIN CONTAINSTABLE (Word_Fine, Znach, '"бухгал*"') f
		ON f.KEY = w.Id
WHERE w.Kod = 1010006101
17 сен 12, 19:18    [13178540]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
Ну и вдогонку, скажем такой Select
SELECT IdNom FROM Word_Fine WHERE (Kod = 1007004101) AND ( Contains(Znach, '"бух*"'))

выполняется нормально, а разница лишь в поле Kod

В чем причина?
18 сен 12, 20:53    [13185055]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Super_cherry
В чем причина?
... не встать. Вы пришли поболтать?
Написано же: 13178540
18 сен 12, 22:54    [13185519]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
Mnior,

А вы считаете что это и есть решение?
Мне оно не помогло...
Поэтому и интересуюсь...
Если можете помочь - помогите, если нет зачем меня упрекать...
18 сен 12, 23:34    [13185675]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Super_cherry, причина в статистике, и планы делаются разные.
Как сделать правильно это другой вопрос. С полнотекстовыми запросами я не спец.
А как заставить работать быстро так это можно разными способами, к примеру заморозить план, например так:
DECLARE @Kod Int = 1007004101
SELECT IdNom FROM Word_Fine WHERE (Kod = @Kod) AND ( Contains(Znach, '"бух*"')) OPTION (OPTIMIZE FOR (@Kod = 1010006101))
18 сен 12, 23:49    [13185716]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
Mnior,

Спасибо, попоробую.
Дело в том, что у меня это большая таблица, и до поры все было более-менее успешно, а потом при внесении записей с другим значением Kod, они перестали выбираться. Сейчас очистил всю таблицу, заливаю заново данными и буду внимательно смотреть
18 сен 12, 23:53    [13185724]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
Super_cherry
А вы считаете что это и есть решение?
Мне оно не помогло...
Поэтому и интересуюсь...
Это не решение, это ответ на вопрос о причине, а знание причины может помочь решить проблему.

Оба варианта не помогли?
Super_cherry
Если можете помочь - помогите, если нет зачем меня упрекать...

Вы хоть пишите, что вы пробовали :-) А то непонятно, может проблема уже решена...
Super_cherry
Ну и вдогонку, скажем такой Select
SELECT IdNom FROM Word_Fine WHERE (Kod = 1007004101) AND ( Contains(Znach, '"бух*"'))

выполняется нормально, а разница лишь в поле Kod
Вы имеете в виду - в значении фильтра для поля Kod?
19 сен 12, 00:19    [13185775]     Ответить | Цитировать Сообщить модератору
 Re: Странно как-то!?  [new]
Super_cherry
Member

Откуда:
Сообщений: 67
alexeyvg,

Нет, пока не решил, заливаю заново...
Отпишусь
19 сен 12, 00:42    [13185814]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить