Какие можно создать индексы для оптимизации запроса?

У меня есть две простенькие таблицы:

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
→ Ссылка