Какие можно создать индексы для оптимизации запроса?
У меня есть две простенькие таблицы:
CREATE TABLE questions (
id INT,
title VARCHAR2(14),
details VARCHAR2(13)
)
CREATE TABLE answers (
id INT,
question_text VARCHAR2(10),
details VARCHAR2(9),
order INT,
score INT
)
Я написал к ним следующий запрос:
SELECT question_text, title
FROM answers JOIN questions
ON answers .id = questions.id
ORDER BY title, question_text
Какие индексы могут быть добавлены для оптимизации данного запроса? По столбцам title и question_text?
Ответы (1 шт):
Автор решения: Виталий Злобин
→ Ссылка
Я так понимаю индексов вообще нет? Если так, то начни с кластеризованных, они в 99% случаев нужны. Если у тебя связь 1 к 1, то других и не надо, но тогда стоит задуматься над объединением этих таблиц в одну. Если, в будущем, у тебя будет несколько ответов на 1 вопрос, то нужно будет добавить в столбец "questions_id" в таблицу "answers" и на нём создать некластеризованный индекс.
CREATE UNIQUE CLUSTERED INDEX IDX_ID ON questions(id)
CREATE UNIQUE CLUSTERED INDEX IDX_ID ON answers(id)
--CREATE INDEX IDX_QUESTION_ID ON answers(questions_id)
Код лучше оформить в таком порядке(от одного ко многим):
SELECT a.question_text, q.title
FROM questions AS q
JOIN answers AS a ON q.id = a.id
ORDER BY q.title, a.question_text