С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,766

Оптимизация запроса

17.02.2016, 10:31. Показов 578. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, возможно ли в данном случае оптимизировать сам запрос. Красота и идеологические аспекты не интересуют, только скорость выполнения. Индексы ниже не описывал, но они присутствуют где необходимо.

Кратко суть - нужно из таблицы 't3' выбрать все записи, отфильтровав их по полю 'ext_check.some_key'.
SQL
1
2
3
4
5
6
SELECT t3.* FROM t3
    INNER JOIN t2 ON t2.t2_id = t3.t2_id
    INNER JOIN t1 ON t1.t1_id = t2.t1_id
WHERE t1.other_id IN 
    (SELECT ext_link.other_id FROM ext_link WHERE ext_link.master_id = 
        (SELECT ext_check.master_id FROM ext_check WHERE ext_check.some_key = 42))
план выполнения для указанного выше запроса

данные
Таблица 'ext_check' - несколько десятков записей;
Таблица 'ext_link' - несколько сотен записей, несколько десятков уникальных значений 'other_id';
Таблица 't1' - несколько десятков тысяч записей;
Таблицы 't2' и 't3' - в среднем по 5-10 записей на каждую master-запись.

структура таблиц (диаграмма)

структура таблиц (SQL)
SQL
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
--
-- основные таблицы
CREATE TABLE t1
(
    t1_id INT NOT NULL,
    other_id INT NOT NULL
 
    CONSTRAINT pk_t1 PRIMARY KEY (t1_id)
)
 
CREATE TABLE t2
(
    t2_id INT NOT NULL,
    t1_id INT NOT NULL FOREIGN KEY REFERENCES t1 (t1_id)
 
    CONSTRAINT pk_t2 PRIMARY KEY (t2_id)
)
 
CREATE TABLE t3
(
    t3_id INT NOT NULL,
    t2_id INT NOT NULL FOREIGN KEY REFERENCES t2 (t2_id) 
 
    CONSTRAINT pk_t3 PRIMARY KEY (t3_id)
)
 
--
-- вспомогательные таблицы
CREATE TABLE ext_link
(
    master_id INT NOT NULL,
    other_id INT NOT NULL
 
    CONSTRAINT pk_ext_link PRIMARY KEY (master_id, other_id)
)
 
CREATE TABLE ext_check
(
    some_key INT NOT NULL,
    master_id INT NOT NULL
 
    CONSTRAINT pk_ext_check PRIMARY KEY (some_key)
)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2016, 10:31
Ответы с готовыми решениями:

Оптимизация запроса
/*Таблица документов*/ Declare @Documents Table( orID int, repID int, DocTypeID int, repIDD nvarchar(100), Condition int ...

Оптимизация запроса
Добрый день, уважаемые форумчане. Возникла потребности оптимизировать по производительности некоторые куски своего запроса. Так,...

Оптимизация запроса
На клиентской части данный запрос отрабатывает больше минуты. Как его оптимизировать: select distinct *, ...

4
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
17.02.2016, 10:37
Цитата Сообщение от kotelok Посмотреть сообщение
возможно ли в данном случае оптимизировать сам запрос
Не вдаваясь в подробный анализ, как минимум 2 подзапроса объединить в один с JOIN.
1
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
17.02.2016, 10:59
1. Сделать индекс по t1 (other_id). Возможно, результат устроит.

Если не устроил, то:
2. Сделать материализованное представление
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create view vt1_SomeKey
with schemabinding
as
select
 ec.some_key,
 t1.t1_id,
 count_big(*) as c
from
 ext_check ec join
 ext_link el on el.master_id = ec.master_id join
 t1 on t1.other_id = el.other_id
group by
 ec.some_key,
 t1.t1_id;
go
 
create unique clustered index UIX_vt1_SomeKey__some_key__t1_id on vt1_SomeKey (some_key, t1_id);
go
3. Переписать запрос
T-SQL
1
2
3
4
5
6
7
8
select
 t3.*
from
 vt1_SomeKey a with (noexpand) join
 t2 on t2.t1_id = a.t1_id join
 t3 on t3.t2_id = t2.t2_id
where
 a.some_key = 42;
1
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,766
17.02.2016, 11:13  [ТС]
Grossmeister, пробовал, похоже, что сервер достаточно умён и умеет самостоятельно оптимзировать типовые конструкции, так что и любой вариант 'join' и изначальный вариант дают совершенно одинаковые планы выполнения (реальное время не измерял пока).
0
34 / 30 / 10
Регистрация: 24.11.2014
Сообщений: 188
Записей в блоге: 12
17.02.2016, 19:24
Пробовали через профайлер смотреть время выполнения запроса? Существенно ли оно превосходит ожидаемое? Не совсем понимаю, зачем тут вообще что-то оптимизировать. При таком кол-ве записей тормоза очень маловероятны.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2016, 19:24
Помогаю со студенческими работами здесь

Оптимизация запроса
Доброго времени суто. Есть большой запрос. Хотелось бы его оптимизировать таким образом, чтобы убрать использование временных таблиц -...

Оптимизация запроса
Добрый день, имеется БД с числом записей в raspis_service примерно 50 записей, во всех остальных таблицах число записей больше 500 000. ...

Оптимизация запроса
Добрый день, подскажите, пожалуйста: Имеется таблица с данными пользователей: CREATE TABLE Users ( UserID uniqueidentifier NOT NULL...

Оптимизация запроса
Есть ли возможность существенно сократить время запроса? Не обязательно выжимать последние капли скорости, но сокращение времени запроса...

Оптимизация SQL запроса
есть запрос select ... тут поля ( select field1, field2, (field1/field2) as res from (Select DISTINCT count(1) as...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru