:: Visual Foxpro, Foxpro for DOS
Тормозит запрос MS SQL ели значение поля передаеться параметром
Burn
Автор

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
Сегодня столкнулся со странным - вполне банальный запрос:
lcSQL=[SELECT Sum(summa) AS summa,Sum(summa_val) AS summa_val FROM jornal WHERE data>=?m.dat_dog AND data<=?kdate AND tn1=?m.tn1]
lnSQL=SQLExec(ThisForm.ConnHandle,lcSQL,[jornal1])
тормозит.
А если переписать его так
lcSQL=[SELECT Sum(summa) AS summa,Sum(summa_val) AS summa_val FROM jornal WHERE data>=?m.dat_dog AND data<=?kdate AND tn1=']+m.tn1+[']
lnSQL=SQLExec(ThisForm.ConnHandle,lcSQL,[jornal1])
Выбирает практически мгновенно.


------------------
В борьбе бобра с козлом побеждает бобро




Исправлено 1 раз(а). Последнее : Burn, 11.11.19 15:47
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Для первого и второго запросов прикрепи планы (в XML), поглазеем, почему так сервер себя ведёт.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 11.11.19 16:06
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Burn
Автор

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
А как я план из Фокса получу?
В SQL менеджере все нормально


------------------
В борьбе бобра с козлом побеждает бобро
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
qaru.site (п.3, п.4)

www.sql.ru


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
индексы..., а также попробуй переменяй полследовательность выполнения запросов (кэш фокса), перезапустив фокс, может по-другому будет.

Доб. Ой, там SQLSELECT, так там таже фигня, сервер БД тоже держит в кеше, как фокс

"" tn1=']+m.tn1+[']
что за конструкция в SQL, скобки наоборот? или это часть символьного выражения, не уследил которое... эхехе, те кто скобки применяет (квадратные, то сам на себя пеняет, придумал (



Исправлено 2 раз(а). Последнее : of63, 11.11.19 23:07
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Только не qaru Гореть в аду этим ворюгам/тупо-авто-переводчикам. Это статья с SO (stackoverflow.com кто не в курсе).

Порой оптимизатор убивает небольшое различие в типах данных связываемых переменных - ну типа не целочисленное, а вещественное число приходит, или не smalldate а полноценный date. Ещё может вредить кривая/неактуальная статистика. Конечно же начинать стоит с анализа плана, при том именно того, по которому реально работал запрос, а не "оценочного". Ну и в трассировке (Profiler) вниматлеьно просмотреть какие реально данные (включая их типы) посылает фокс.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
К тому же, Бёрн подвержен старой ошибке, в смысле:
значение передается
значение передаеться

найдите отличия смысла, товарищи читатели. (Частая ошибка, хотя, на нее насрать)
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Burn
Автор

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
Igor Korolyov
Порой оптимизатор убивает небольшое различие в типах данных связываемых переменных - ну типа не целочисленное, а вещественное число приходит, или не smalldate а полноценный date.
Вот и у меня подобные мысли возникли. При том, что поле символьное но обычно содержит конструкцию типа цифры+слеш+цифры. Просто не знал как проверить.

of63
что за конструкция в SQL, скобки наоборот?
Код целиком выдран из программы. По сути там
m.tn1=' 667/13MOVEST'
SELECT Sum(summa) AS summa,Sum(summa_val) AS summa_val FROM jornal WHERE data>=?m.dat_dog AND data<=?kdate AND tn1=?m.tn1
и
SELECT Sum(summa) AS summa,Sum(summa_val) AS summa_val FROM jornal WHERE data>=?m.dat_dog AND data<=?kdate AND tn1=' 667/13MOVEST'



Исправлено 1 раз(а). Последнее : Burn, 12.11.19 09:00
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Ну дык, либо план выкладывай, либо определение таблицы jornal, сдаётся мне, что tn1 имеет тип nchar/nvarchar.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Попробуй в студии с параметром и без.
Будет ли разница?
daclare @tn1 ... etc
Просто коли поле символьное, сомнительна путаница.

И если разницы не будет то попробуй в фоксе
text
daclare @tn1 ... etc
endtext
А если будет, сразу можешь планы посмотреть
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Burn
Автор

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
PaulWist
Ну дык, либо план выкладывай, либо определение таблицы jornal, сдаётся мне, что tn1 имеет тип nchar/nvarchar
Просто char(15). А вот в запрос идет varchar(15)
CREATE TABLE [dbo].[jornal](
[uniq] [uniqueidentifier] NOT NULL CONSTRAINT [DF_jornal_uniq] DEFAULT (newid()),
[data] [datetime] NOT NULL CONSTRAINT [DF_jornal_data] DEFAULT (getdate()),
[bs_k] [decimal](4, 0) NOT NULL CONSTRAINT [DF_jornal_bs_k] DEFAULT ((0)),
[bss_k] [decimal](2, 0) NOT NULL CONSTRAINT [DF_jornal_bss_k] DEFAULT ((0)),
[statja_k] [decimal](2, 0) NOT NULL CONSTRAINT [DF_jornal_statja_k] DEFAULT ((0)),
[bs_d] [decimal](4, 0) NOT NULL CONSTRAINT [DF_jornal_bs_d] DEFAULT ((0)),
[bss_d] [decimal](2, 0) NOT NULL CONSTRAINT [DF_jornal_bss_d] DEFAULT ((0)),
[statja_d] [decimal](2, 0) NOT NULL CONSTRAINT [DF_jornal_statja_d] DEFAULT ((0)),
[kod_prod_d] [decimal](4, 0) NOT NULL CONSTRAINT [DF_jornal_kod_prod_d] DEFAULT ((0)),
[kod_prod_k] [decimal](4, 0) NOT NULL CONSTRAINT [DF_jornal_kod_prod_k] DEFAULT ((0)),
[cex_d] [decimal](3, 0) NOT NULL CONSTRAINT [DF_jornal_cex_d] DEFAULT ((0)),
[otdel_d] [decimal](3, 0) NOT NULL CONSTRAINT [DF_jornal_otdel_d] DEFAULT ((0)),
[cex_k] [decimal](3, 0) NOT NULL CONSTRAINT [DF_jornal_cex_k] DEFAULT ((0)),
[otdel_k] [decimal](3, 0) NOT NULL CONSTRAINT [DF_jornal_otdel_k] DEFAULT ((0)),
[motiv] [varchar](250) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_jornal_motiv] DEFAULT (''),
[sub_62] [decimal](2, 0) NOT NULL CONSTRAINT [DF_jornal_sub_62] DEFAULT ((0)),
[kol] [decimal](14, 6) NOT NULL CONSTRAINT [DF_jornal_kol] DEFAULT ((0)),
[summa] [decimal](16, 2) NOT NULL CONSTRAINT [DF_jornal_summa] DEFAULT ((0)),
[summa_val] [decimal](16, 2) NOT NULL CONSTRAINT [DF_jornal_summa_val] DEFAULT ((0)),
[n_doc_k] [decimal](7, 0) NOT NULL CONSTRAINT [DF_jornal_n_doc_k] DEFAULT ((0)),
[n_doc_d] [decimal](7, 0) NOT NULL CONSTRAINT [DF_jornal_n_doc_d] DEFAULT ((0)),
[p1_k] [decimal](6, 0) NOT NULL CONSTRAINT [DF_jornal_p1_k] DEFAULT ((0)),
[p1_d] [decimal](6, 0) NOT NULL CONSTRAINT [DF_jornal_p1_d] DEFAULT ((0)),
[tab] [decimal](5, 0) NOT NULL CONSTRAINT [DF_jornal_tab] DEFAULT ((0)),
[fio] [char](50) COLLATE Cyrillic_General_CI_AS NULL CONSTRAINT [DF_jornal_fio] DEFAULT (''),
[tn1] [char](15) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_jornal_tn1] DEFAULT (''),
[spec] [decimal](6, 0) NOT NULL CONSTRAINT [DF_jornal_spec] DEFAULT ((0)),
[data_act] [datetime] NULL,
[n_seria] [decimal](14, 0) NOT NULL CONSTRAINT [DF_jornal_n_seria] DEFAULT ((0)),
[data_sost] [datetime] NOT NULL CONSTRAINT [DF_jornal_data_sost] DEFAULT (getdate()),
[numer] [decimal](10, 0) NOT NULL CONSTRAINT [DF_jornal_numer] DEFAULT ((0)),
[sl] [char](1) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_jornal_sl] DEFAULT (''),
[part] [decimal](1, 0) NOT NULL CONSTRAINT [DF_jornal_part] DEFAULT ((0)),
[statia] [decimal](2, 0) NOT NULL CONSTRAINT [DF_jornal_statia] DEFAULT ((0)),
[podstatia] [decimal](2, 0) NOT NULL CONSTRAINT [DF_jornal_podstatia] DEFAULT ((0)),
[substatia] [decimal](2, 0) NOT NULL CONSTRAINT [DF_jornal_substatia] DEFAULT ((0)),
[comput] [char](15) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_jornal_comput] DEFAULT (''),
[date_cor] [datetime] NOT NULL CONSTRAINT [DF_jornal_date_cor] DEFAULT (getdate()),
[prf] [decimal](5, 0) NOT NULL CONSTRAINT [DF_jornal_prf] DEFAULT ((0)),
[budstatia] [char](15) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_jornal_budstatia] DEFAULT (''),
[pstatia] [decimal](1, 0) NOT NULL CONSTRAINT [DF_jornal_pstatia] DEFAULT ((0)),
[invent] [char](10) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_jornal_invent] DEFAULT (''),
[gnom] [char](10) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_jornal_gnom] DEFAULT (''),
[nom_sl] [decimal](10, 0) NOT NULL CONSTRAINT [DF_jornal_nom_sl] DEFAULT ((0)),
[numer1] [decimal](10, 0) NOT NULL CONSTRAINT [DF_jornal_numer1] DEFAULT ((0)),
[n_zakaz] [decimal](10, 0) NOT NULL CONSTRAINT [DF_jornal_n_zakaz] DEFAULT ((0)),
[nom_sz] [decimal](5, 0) NOT NULL CONSTRAINT [DF_jornal_nom_sz] DEFAULT ((0)),
[n_schf] [nchar](30) COLLATE Cyrillic_General_CI_AS NOT NULL CONSTRAINT [DF_jornal_n_schf] DEFAULT (''),
[d_nomer] [decimal](7, 0) NOT NULL CONSTRAINT [DF_jornal_d_nomer] DEFAULT ((0)),
[regn] [decimal](5, 0) NOT NULL DEFAULT ((0)),
[nomn] [numeric](10, 0) NOT NULL DEFAULT ((0)),
[p1_fiz] [decimal](6, 0) NOT NULL DEFAULT ((0))
)



Исправлено 1 раз(а). Последнее : Burn, 12.11.19 10:10
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
А почему сплошные char?, а не varchar?
В чем глубокий смысл?
Просто у себя, так редко такое встречаю, и как правило, что то старинное.

Хотя и не думаю что это важно.
Ну и что бы сделать при передаче char
Сделай как я писал
text
declare @tn1 char(15)='твои_данные'
--дальше запрос с этим параметром.
endtext



Исправлено 1 раз(а). Последнее : Аспид, 12.11.19 10:13
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Burn
Автор

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
Аспид
А почему сплошные char?, а не varchar?
В чем глубокий смысл?
Просто у себя, так редко такое встречаю, и как правило, что то старинное.
Так и есть это очень старые места, которые исправлять очень геморно - таблицы большие и постоянно в работе
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Burn
Автор

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
Аспид
Попробуй в студии с параметром и без.
Будет ли разница?
Пробовал - нету. Но там как раз использовался declare @tn1 char(15).
Попробую с declare @tn1 varchar(15)
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Burn
Просто char(15). А вот в запрос идет varchar(15)

План давай!


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Burn
Автор

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
Туплю. Не могу понять как план вытащить из Профайлера
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Burn
Автор

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
Burn
Попробую с declare @tn1 varchar(15)
Ага... А так подтормаживает
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
так опиши с declare прямо в фоксе.
Как я писал. на 90% все будет ОК
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Burn
Туплю. Не могу понять как план вытащить из Профайлера

[attachment 32295 1.png]

[attachment 32296 2.png]


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Тормозит запрос MS SQL ели значение поля передаеться параметром
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
[attachment 32297 3.png]


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 25 PaulWist hvh2007  (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика