Медленный запрос при использовании ORDER BY

(I) Super Key - Атрибут или комбинация атрибутов, которые используются для уникальной идентификации записей, называется Super Key. Стол может иметь много Супер Ключей.

например. Super Key

  1. ID
  2. ID, Имя
  3. ID, Адрес
  4. ID, Department_ID
  5. ID, Зарплата
  6. Имя, Адрес
  7. Имя, Адрес, Department_ID

Таким образом, любая комбинация, которая может однозначно идентифицировать записи, будет Супер Ключом.

(II) Ключ-кандидат - Его можно определить как минимальный супер-ключ или неприводимый супер-ключ. Другими словами, атрибут или комбинация атрибута, который уникальным образом идентифицирует запись, но ни одно из его соответствующих подмножеств не может идентифицировать записи однозначно.

например. ключа-кандидата

  1. ID
  2. Имя, адрес

Для приведенной выше таблицы у нас есть только два ключа-кандидата (т.е. неустранимый супер-ключ), используемых для идентификации записи из таблицы однозначно. Идентификационный ключ может однозначно идентифицировать запись, и аналогичным образом комбинация Имени и Адреса может однозначно идентифицировать запись, но ни Имя, ни Адрес не могут быть использованы для уникальной идентификации записей, так как возможно, что у нас два сотрудника с одинаковым именем или два сотрудника тот же дом.

(III) Первичный ключ - Ключ-кандидат, который используется разработчиком базы данных для уникальной идентификации каждой строки в таблице, называется Первичным ключом. Первичный ключ может состоять из одного или нескольких атрибутов таблицы.

например. первичного ключа - разработчик базы данных может использовать один из ключей-кандидатов в качестве первичного ключа. В этом случае у нас есть «ID» и «Имя, адрес» в качестве ключа-кандидата, мы будем рассматривать «ID» ключ в качестве первичного ключа, так как другой ключ является комбинацией более чем одного атрибута.

(IV) Внешний ключ - Внешний ключ - это атрибут или комбинация атрибута в одной базовой таблице, которая указывает на ключ-кандидат (обычно это первичный ключ) другой таблицы. Назначение внешнего ключа - обеспечить ссылочную целостность данных, т. Е. Разрешены только значения, которые должны появляться в базе данных.

например. внешнего ключа - давайте предположим, что у нас есть другая таблица, т. е. таблица отдела с атрибутами «Department_ID», «Department_Name», «Manager_ID», «Location_ID» с Department_ID в качестве первичного ключа. Теперь атрибут Department_ID таблицы Employee (зависимой или дочерней таблицы) можно определить как внешний ключ, поскольку он может ссылаться на атрибут Department_ID таблицы Departments (ссылочной или родительской таблицы), а значение внешнего ключа должно соответствовать существующему значению в родительская таблица или быть NULL.

(V) Составной ключ - Если мы используем несколько атрибутов для создания первичного ключа, то этот первичный ключ называется составным ключом (также называемым составным ключом или составным ключом).

например. составного ключа, если мы использовали «Имя, адрес» в качестве первичного ключа, то это будет наш составной ключ.

(VI) Альтернативный ключ - Альтернативный ключ может быть любым из ключей-кандидатов, кроме первичного ключа.

например. Альтернативного ключа - «Имя, Адрес», поскольку это единственный другой Ключ-Кандидат, который не является Первичным Ключом.

(VII) Вторичный ключ - Атрибуты, которые даже не являются суперключем, но могут все еще использоваться для идентификации записей (не уникальных), известны как вторичный ключ.

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

18
задан Vishnu S Babu 21 January 2017 в 16:17
поделиться

4 ответа

, может быть, это поможет:

SELECT * FROM (    
     SELECT
      Course.CourseID,
      Course.Description,
      UserCourse.UserID,
      UserCourse.TimeAllowed,
      UserCourse.CreatedOn,
      UserCourse.PassedOn,
      UserCourse.IssuedOn,
      C.LessonCnt
    FROM
      UserCourse
    INNER JOIN
      Course
    USING(CourseID)
    INNER JOIN
    (
      SELECT CourseID, COUNT(*) AS LessonCnt FROM CourseSection GROUP BY CourseID
    ) C
    USING(CourseID)
    WHERE 
      UserCourse.UserID = 8810
) ORDER BY CourseID
17
ответ дан 30 November 2019 в 08:21
поделиться

Является ли столбец, который вы упорядочиваете, индексируется?

Индексирование значительно ускоряет упорядочивание и фильтрацию.

7
ответ дан 30 November 2019 в 08:21
поделиться

Вы обновляли статистику в своей базе данных? Я столкнулся с чем-то похожим на своем, где у меня было 2 идентичных запроса, единственная разница в которых заключалась в заглавной букве, один вернулся через 1/2 секунды, а другой занял почти 5 минут. Обновление статистики устранило проблему

0
ответ дан 30 November 2019 в 08:21
поделиться

Подобный вопрос был задан перед здесь.

Это может помочь и вам. В основном он описывает использование составных индексов и принцип работы order by.

0
ответ дан 30 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: