powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Индексирование
25 сообщений из 27, страница 1 из 2
Индексирование
    #32037179
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Различные эксперементы с индексированием таблиц дают определенное снижение времени выполнения запроса, но ве эти эксперементы делаются всеж методом подбора.
Где пожно найти инфу по правилам индексирования? Чтоб хоть знать, что надо индексировать в тех или иных случаях?
...
Рейтинг: 0 / 0
Индексирование
    #32037253
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот несколько рекомендаций:
1. поля с типом Date обычно не индексируют.
2. Индексировать надо поля которые участвуют в Join
3. Индексировать надо поля в большой селективностью ( то есть те которые выводят мало повторяющихся значений
4. Primary and Foreigh keys
5. На те столбцы, которые часто используются в группировках при аггрегировании

При каких условия не использовать индексы:

1. Редко используемые в запросах
2. Содержащие мало уникальных значений(например на поле содержащее пол: м или ж)
2. на столбцы с типом text ntext и image

Есть еще кластерные индексы, составные индексы.

В общем вам в BOL - Designing an index
...
Рейтинг: 0 / 0
Индексирование
    #32037257
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем была таблица, к ней еще несколько подключалось. Работал запрос секунд 16. Прондексировал, стал работать больше секунды. После этого я добавлял индексы другим таблицам в базе, затем попробовал отработать тот запрос, а он у меня начал отрабатывать ровно минуту, через некоторое время стал отрабатываться минуту и одну секунду, причем стабильно.
Что могло произойти? Мотут ли индексы увеличивать время выполнения запроса?
...
Рейтинг: 0 / 0
Индексирование
    #32037263
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может обновить статистику ?
...
Рейтинг: 0 / 0
Индексирование
    #32037265
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот про неиндексирование по Date - это Вы где такие рекомендации нашли? У меня без таких индексов некотрые запросы раз эдак в сто медленнее работать будут.
...
Рейтинг: 0 / 0
Индексирование
    #32037268
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит обновить статистику?
...
Рейтинг: 0 / 0
Индексирование
    #32037272
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выполнит sp_updatestats
...
Рейтинг: 0 / 0
Индексирование
    #32037276
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при изменении значений индексов иногда не происходит
обновление статистики - таблица начинает тормозть
спасает:

sp_updatestats (T-SQL)
Runs UPDATE STATISTICS against all user-defined tables in the current database.

Syntax
sp_updatestats

Return Code Values
0 (success) or 1 (failure)

а еще надо проверить ( или удалить и снова создать) наличие индексов по полям по которым идет join и where в запросах (бывает отваливаются)
...
Рейтинг: 0 / 0
Индексирование
    #32037277
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помогло.

Собственно тормоза пропадают после того, как убираешь пару фильтров, хотя рядом два аналогичных фильтра. Проверка происходит по датам, которые берутся из подзапросов.
...
Рейтинг: 0 / 0
Индексирование
    #32037278
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы уточнть на счет отваливающихся индексов.
Часто ли это происходит, как можно узнать? Ведь у меня таблиц немало.
...
Рейтинг: 0 / 0
Индексирование
    #32037281
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно попробовать проанализировать план выполнения запроса
...
Рейтинг: 0 / 0
Индексирование
    #32037286
Alexander_Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя больше информации привести о таблицах, индексах, запросах - а то мы как-то абстрактно все обсуждаем....
...
Рейтинг: 0 / 0
Индексирование
    #32037294
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой очень запрос, с достаточно извращенными подзапросами.

В плане выполнения запроса есть одна ветка, если тот "тормозящий" фильтр убрать, показывает что подключена таблица с Row count 3518. Если фильтр вернуть, Row count равен 5269964
...
Рейтинг: 0 / 0
Индексирование
    #32037296
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
текст запроса плз....
скорее всего там и собака ....
...
Рейтинг: 0 / 0
Индексирование
    #32037297
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что же это за фильтр едреный, аж интересно стало
...
Рейтинг: 0 / 0
Индексирование
    #32037299
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем вот запрос, упростить я его и сам бы рад, да нужно было получить данные из нескольких таблиц одним запросом. В конце заремлены две строки, которые тормоза и вызывают.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
	SELECT TOP  1000 
		journal_service.UID,
		journal_service.UIDOwner,
		journal_service.DTInsert,
		journal_service.DTUpdate,
		journal_service.UIDService,
		journal_service.UIDBill,
		list_service.Caption AS CaptionService,
		list_unit.Caption AS CaptionUnit,
		journal_service.Quantity,
		journal_service.Lag,
		journal_service.Discount,
		journal_service.Taxrate,
		journal_service.Caption,
		CASE WHEN (sum_charge.UIDPayer IS NOT NULL) THEN sum_charge.UIDPayer
			ELSE sum_pay.UIDPayer
		END AS UIDPayer,
		CASE WHEN (sum_charge.UIDRecipient IS NOT NULL) THEN sum_charge.UIDRecipient
			ELSE sum_pay.UIDRecipient
		END AS UIDRecipient,
		journal_service.UIDManPay,
		journal_service.UIDManCharge,
		journal_service.UIDManClient,
		CASE WHEN (sum_pay.SumPay IS NULL) THEN NULL
							    ELSE journal_service.DTPay
		END AS DTPay,
		CASE WHEN (sum_charge.SumCharge IS NULL) THEN NULL
							    ELSE journal_service.DTCharge
		END AS DTCharge,
		sum_pay.SumPay,
		sum_charge.SumCharge,
		CASE WHEN (sum_charge.SumCharge IS NULL) THEN  1 
								 ELSE  2 
		END AS Charge,
		CASE WHEN (sum_pay.SumPay IS NULL) THEN  1 
							    ELSE  2 
		END AS Pay
	FROM 
		journal_service
		LEFT OUTER JOIN list_service ON  journal_service.UIDService = list_service.UID
		LEFT OUTER JOIN list_unit ON list_service.UIDUnit = list_unit.UID
		LEFT OUTER JOIN (SELECT DISTINCT UIDService, max(DTActual) AS MaxDate
			FROM journal_service_taxrate
			GROUP BY UIDService) AS max_date ON list_service.UID=max_date.UIDService
		LEFT OUTER JOIN journal_service_taxrate ON ((max_date.UIDService=journal_service_taxrate.UIDService) and (max_date.MaxDate=journal_service_taxrate.DTActual))
		LEFT OUTER JOIN (SELECT bind_amount_service.UIDJournalService, journal_amount.UIDPayer, journal_amount.UIDRecipient, sum(journal_amount.Amount) AS SumCharge
			FROM	journal_amount
				LEFT OUTER JOIN bind_amount_service ON journal_amount.UID=bind_amount_service.UIDAmount
				LEFT OUTER JOIN journal_service ON bind_amount_service.UIDJournalService=journal_service.UID
			WHERE journal_amount.UIDRecipient=journal_service.UIDPayer
			GROUP BY bind_amount_service.UIDJournalService, journal_amount.UIDPayer, journal_amount.UIDRecipient) AS sum_charge ON journal_service.UID=sum_charge.UIDJournalService
		LEFT OUTER JOIN (SELECT bind_amount_service.UIDJournalService,  journal_amount.UIDPayer, journal_amount.UIDRecipient, sum(journal_amount.Amount) AS SumPay
			FROM	journal_amount
				LEFT OUTER JOIN bind_amount_service ON journal_amount.UID=bind_amount_service.UIDAmount
				LEFT OUTER JOIN journal_service ON bind_amount_service.UIDJournalService=journal_service.UID
			WHERE journal_amount.UIDPayer=journal_service.UIDPayer
			GROUP BY bind_amount_service.UIDJournalService, journal_amount.UIDPayer, journal_amount.UIDRecipient) AS sum_pay ON journal_service.UID=sum_pay.UIDJournalService
	WHERE 
		((@UIDService=journal_service.UIDService) or (@UIDService IS NULL)) and
		((@UIDBill=journal_service.UIDBill) or (@UIDBill IS NULL)) and
		((@UIDManPay=journal_service.UIDManPay) or (@UIDManPay IS NULL)) and
		((@UIDManCharge=journal_service.UIDManCharge) or (@UIDManCharge IS NULL)) and
		((@UIDManClient=journal_service.UIDManClient) or (@UIDManClient IS NULL)) and
		(((sum_pay.SumPay IS NOT NULL) and (@Pay= 2 )) or
		((sum_pay.SumPay IS NULL) and (@Pay= 1 )) or
		(@Pay= 0 )) and
		(((sum_charge.SumCharge IS NOT NULL) and (@Pay= 2 )) or
		((sum_charge.SumCharge IS NULL) and (@Pay= 1 )) or
		(@Pay= 0 )) and
		((@UIDPayer=journal_service.UIDPayer) or (@UIDPayer IS NULL))and
		((sum_pay.UIDPayer=@UIDPayer) or (sum_charge.UIDPayer=@UIDPayer) or (@UIDPayer IS NULL)) and
		((sum_pay.UIDRecipient=@UIDRecipient) or (sum_charge.UIDRecipient=@UIDRecipient) or (@UIDRecipient IS NULL)) and
		(((sum_pay.SumPay IS NOT NULL) and (@DTPayBegin<=DTPay)) or (@DTPayBegin IS NULL)) and
		(((sum_pay.SumPay IS NOT NULL) and (@DTPayEnd>=DTPay)) or (@DTPayEnd IS NULL))  --and
 
 --		(((sum_charge.SumCharge IS NOT NULL) and (@DTChargeBegin<=DTCharge)) or (@DTChargeBegin IS NULL)) and
 
--		(((sum_charge.SumCharge IS NOT NULL) and (@DTChargeEnd>=DTCharge)) or (@DTChargeEnd IS NULL))
...
Рейтинг: 0 / 0
Индексирование
    #32037301
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вот переменные, участвующие в запросе.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE PROCEDURE JournalServiceSelect
	@UIDService int = NULL,
	@UIDBill int = NULL,
	@UIDPayer int = NULL,
	@UIDRecipient int = NULL,
	@Pay int = NULL,
	@Charge int = NULL,
	@DTPayBegin datetime = NULL,
	@DTPayEnd datetime = NULL,
	@DTChargeBegin datetime = NULL,
	@DTChargeEnd datetime = NULL,
	@UIDManPay int = NULL,
	@UIDManCharge int = NULL,
	@UIDManClient int = NULL
...
Рейтинг: 0 / 0
Индексирование
    #32037303
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну наворотил....
разбей запрос на несколько...
и объединяй по UNION ALL
...
Рейтинг: 0 / 0
Индексирование
    #32037305
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну разбивать надо было сразу, навено. :)
Он работает, правда без индексов не так быстро, но проиндексировав таблицы он работал 2 -3 секунды. А затем вдруг резко начал тормозить, при этом сам запрос я не трогал.
...
Рейтинг: 0 / 0
Индексирование
    #32037310
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда смотри в индексах....
статистику посмотри....
в общем индекс тюнинг!
как раскинуты индексы... параметры индексов...
базу сожми...
...
Рейтинг: 0 / 0
Индексирование
    #32037313
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тольк столкнулся с первыми проблемами с индексами, можно чуть подробней по поводу статистики, индекс тюнинга, параметров индексов.
...
Рейтинг: 0 / 0
Индексирование
    #32037392
sFx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Alexander_Chepack: я же говорю "обычно". это из опыта людей.
если хотите, что бы еще быстрее было, храните дату в числовом формате, вообще все летать будет.
...
Рейтинг: 0 / 0
Индексирование
    #32037430
Underking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всеж вопрос на засыпку, могут ли повлиять на время выполнения запроса индексы в таблицах, не участвующих в данном запросе?
...
Рейтинг: 0 / 0
Индексирование
    #32037451
Сат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напрямую не могут.. Косвенно - да... мало ли, может у тебя там индексов образовывается на несколько гиг и места на винте не остается...(одна из причин и к тому же самая маловероятная..)
...
Рейтинг: 0 / 0
Индексирование
    #32037454
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Статья "Что быстрее: индексный доступ или сканирование таблицы?" . Тут много интересного насчет индексов.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Индексирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]