Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Здравствуйте.
Имеем Sql server 2008 R2

И запрос:

SELECT * FROM (
SELECT Row_Number()OVER(
			PARTITION BY f.name 
			ORDER BY f.priority, 
			d.end_date, 
			$CasePname, 
			p.name DESC
			) AS NameOrder, 
	p.id_price as p_id_price,
	p.id_service as p_id_service,
	p.name as p_name,
	p.name_original as p_name_original,
	p.id_producer_country as p_id_producer_country,
	p.id_firm as p_id_firm,
	p.unit as p_unit,
	f.name as f_name,
	f.priority as f_priority,
	f.address as f_address,
	f.phone as f_phone,
	city.name as city_name,
	pc.name as pc_name
FROM Price p
	left join Firm f on f.id_service = p.id_service AND f.id_city = p.id_city AND f.id_firm = p.id_firm
	left join City city on city.id_city = p.id_city
	left join Producer_country pc on pc.id_producer_country = p.id_producer_country
	left join Dogovor d on d.id_service=p.id_service AND d.id_city=p.id_city AND d.id_firm=p.id_firm
WHERE 
	p.id_city LIKE '2342' AND p.include='1' 
	$group_row
)
AS S WHERE S.NameOrder = 1
ORDER BY S.f_priority DESC


Может ли данный алгоритм поиска выдавать разные результаты при большой нагрузке на сервер?
И если да, почему и как избежать?
24 фев 14, 11:43    [15618153]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Один и тот же запрос вполне может выдавать разные результаты хотя бы потому, что между выполнениями данные в таблицах могут измениться. А у вас, к тому же, еще какой-то динамической критерий. Который тоже может меняться.
24 фев 14, 11:48    [15618193]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
iap
Member

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

что такое $CasePname и $group_row?
Почему Вы задаёте вопрос, скрывая часть исходной информации?
24 фев 14, 11:51    [15618210]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Amateur7
Member

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

что такое $CasePname и $group_row?
Почему Вы задаёте вопрос, скрывая часть исходной информации?


поторопился немного, запрос немного сложный:

$CasePname = "
case when p.name like 'тест %' then 0 else 1 end,
case when p.name like '% тест %' then 0 else 1 end";

$group_row=" AND p.id_group=25";
24 фев 14, 11:53    [15618234]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Amateur7
Member

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

а как от этого огородиться, чтобы результаты были одни и те же ?
Просто впервые с таким столкнулись....
24 фев 14, 11:54    [15618245]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
invm
Один и тот же запрос вполне может выдавать разные результаты хотя бы потому, что между выполнениями данные в таблицах могут измениться. А у вас, к тому же, еще какой-то динамической критерий. Который тоже может меняться.


Данные в таблицах не меняются.

База одна и та же, данные в таблицах не меняются...
24 фев 14, 11:56    [15618269]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
Просто впервые с таким столкнулись....

С чем ?
Вы хотите сказать, что один и тот же текст запроса, для одних и тех эе таблиц возвращает разные результаты ? Которые зависят от текущей нагрузки ?
24 фев 14, 12:06    [15618340]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Amateur7
Member

Откуда:
Сообщений: 266
Glory
Amateur7
Просто впервые с таким столкнулись....

С чем ?
Вы хотите сказать, что один и тот же текст запроса, для одних и тех эе таблиц возвращает разные результаты ? Которые зависят от текущей нагрузки ?


Именно так.
База одна, данные в таблицах одни и те же, запрос один.
Сейчас поступила информация, что когда запрос проверяют много пользователей, запрос выдает разные результаты.
На практике мы такого не встречали...

Вот и выложили сам запрос и решили проконсультироваться на форуме, реально ли это....
24 фев 14, 12:12    [15618390]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
iap
Member

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

значение набора полей (f.priority, d.end_date, $CasePname, p.name) уникально?
Или на разных строках могут быть абсолютно одинаковые значения?
24 фев 14, 12:18    [15618427]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Amateur7
Member

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

значение набора полей (f.priority, d.end_date, $CasePname, p.name) уникально?
Или на разных строках могут быть абсолютно одинаковые значения?


Совокупность полей f.priority, d.end_date может быть, а совокупность f.priority, d.end_date, p.name под вопросом, в теории абсолютно одинаковых значений быть не должно, на практике проверить трудно, т.к. база большая.
24 фев 14, 12:33    [15618554]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Amateur7
Member

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

Пусть запрос динамичный, но база то одна и данные не меняются, и запрос один, по одним и тем же условиям... разве возможны разные результаты?
24 фев 14, 12:37    [15618596]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
iap
Member

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

Пусть запрос динамичный, но база то одна и данные не меняются, и запрос один, по одним и тем же условиям... разве возможны разные результаты?
Получается логически неоднозначная нумерация.
NameOrder может принимать значение 1 для нескольких строк на вполне законных основаниях,
но в разных запросах, разумеется. Гарантии, что одна и та же строка всегда получит номер 1,
а другая, с таким же набором значений указанных выше полей, - номер 2, - никакой.

В результат попадают, однако, строки именно с S.NameOrder=1
24 фев 14, 12:51    [15618712]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Amateur7
Пусть запрос динамичный, но база то одна и данные не меняются, и запрос один, по одним и тем же условиям... разве возможны разные результаты?

Нет.
Или запросы разные, или данные

ЗЫ
Могут быть конечо нарушения в индексах
24 фев 14, 13:22    [15619086]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
SFlash
Member

Откуда:
Сообщений: 143
Glory
Amateur7
Пусть запрос динамичный, но база то одна и данные не меняются, и запрос один, по одним и тем же условиям... разве возможны разные результаты?

Нет.
Или запросы разные, или данные

ЗЫ
Могут быть конечо нарушения в индексах


Или старая статистика + "плохой" план запроса, если хранимка используется. Сам несколько раз сталкивался, пока WITH REBUILD не прицепил. Ну и sp_updatestats не повредит как минимум ежесуточно.
24 фев 14, 15:16    [15620087]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
SFlash
Или старая статистика + "плохой" план запроса, если хранимка используется.

статистика и плохой план не могут влиять на конечный результат.
Только на способ получения результата.
24 фев 14, 15:21    [15620131]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Glory
SFlash
Или старая статистика + "плохой" план запроса, если хранимка используется.

статистика и плохой план не могут влиять на конечный результат.
Только на способ получения результата.
Разные планы могут приводить к разным результатам.
Если результат зависит от порядка выполнения разных частей плана.
24 фев 14, 15:23    [15620150]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
Amateur7
Может ли данный алгоритм поиска выдавать разные результаты при большой нагрузке на сервер?
Да.
Amateur7
И если да, почему и как избежать?
Если сочетание
f.priority,
d.end_date,
$CasePname,
p.name
неуникально для строк.

Что бы избежать, нужно сделать это уникальным, например, добавить в сортировку в конец один или несколько ИД записей из таблиц
24 фев 14, 15:24    [15620158]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Exproment
Member

Откуда:
Сообщений: 416
SFlash
Или старая статистика + "плохой" план запроса, если хранимка используется. Сам несколько раз сталкивался, пока WITH REBUILD не прицепил. Ну и sp_updatestats не повредит как минимум ежесуточно.

0_о.. как статистика может влиять на результат выполнения ? План запроса определяет какие путем данные получить. Если даже меняется путь получения - резалт сет должен быть аналогичен. Могуть быть разные операторы и разные индексы использованы, но если ничего не меняется, то и результат изменяться не должен.
Glory
Могут быть конечо нарушения в индексах

Что это значит ? :)

ТС: какой уровень изоляции ? Как определяли, что в таблицах данные не меняются ?
24 фев 14, 15:25    [15620168]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Exproment
Glory
Могут быть конечо нарушения в индексах

Что это значит ? :)

Очень просто
например, в уникальном индексе появились дубликаты
24 фев 14, 15:25    [15620173]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
Exproment
Если даже меняется путь получения - резалт сет должен быть аналогичен. Могуть быть разные операторы и разные индексы использованы, но если ничего не меняется, то и результат изменяться не должен.
Конечно, это не так, выше было объяснение.

К примеру, запрос
select top 1 * from table 

не гарантирует выдачу одной и той же записи.
24 фев 14, 15:29    [15620200]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
iap
Разные планы могут приводить к разным результатам.
Если результат зависит от порядка выполнения разных частей плана.

Только если используется часть отсортированного набора
А если весь, то какая разница как он отсортирован
24 фев 14, 15:30    [15620206]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Glory
iap
Разные планы могут приводить к разным результатам.
Если результат зависит от порядка выполнения разных частей плана.

Только если используется часть отсортированного набора
А если весь, то какая разница как он отсортирован
Правильно. Здесь так и есть.
Случайным образом присваивается номер 1 одной из идентичных строк. Она и попадает в результат.
Я держал в уме пример получения накопительной строки в переменной со сложной кляузой ORDER BY.
Мы же много раз обсуждали этот случай.
24 фев 14, 15:38    [15620282]     Ответить | Цитировать Сообщить модератору
 Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
Exproment
Member

Откуда:
Сообщений: 416
iap, т.е. даже при:
  • явной сортировке и
  • отсутствии изменений в индексе
    sql server может вернуть одинаковые строки в разном порядке в разное время ? 0_о
  • 24 фев 14, 15:54    [15620454]     Ответить | Цитировать Сообщить модератору
     Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47144
    Exproment
    iap, т.е. даже при:
  • явной сортировке и
  • отсутствии изменений в индексе
    sql server может вернуть одинаковые строки в разном порядке в разное время ? 0_о
  • Если сортировка по полю F, а в таблице две строки с F=1, то какой из них он ДОЛЖЕН присвоить номер 1, а?
    Ответ простой: той, которой захочет!
    В один момент это одна строка, в другой - может быть другая.
    И на это право ему дал автор запроса!
    24 фев 14, 16:03    [15620548]     Ответить | Цитировать Сообщить модератору
     Re: Может ли один и то же алгоритм поиска выдавать разные результаты ?  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47144
    И полагаться на судьбу (!!!) в данном вопросе - это верх непрофессионализма автора запроса.
    Всё должно быть чётко и однозначно! Если, конечно, специально не задумано что-то другое
    24 фев 14, 16:08    [15620600]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить