Что означают типы eq_ref и ref в MySQL - PullRequest
14 голосов
/ 22 декабря 2010

Когда мы ставим SQL-запрос перед ключевым словом «объяснение», мы получаем таблицу с несколькими столбцами.Пожалуйста, скажите мне, что такое столбец типа.Что означают eq_ref и ref в этом контексте.

Ответы [ 2 ]

35 голосов
/ 25 декабря 2010

Я попробую объяснение ...

eq_ref - представьте, что у вас есть две таблицы.Таблица A со столбцами (id, текст), где id является первичным ключом.Таблица B с теми же столбцами (id, текст), где id является первичным ключом.Таблица A содержит следующие данные:

1, Hello 
2, How are

Таблица B содержит следующие данные:

1, world!
2, you?

Представьте eq_ref как JOIN между A и B:

select A.text, B.text where A.ID = B.ID

Это JOIN очень быстрое, потому что для каждой строки, отсканированной в таблице A, в таблице B может быть только ONE строка, которая удовлетворяет условию JOIN.Один и не более одного.Это потому, что Б.ид УНИКАЛЬНЫЙ.Вот вам псевдо код, который иллюстрирует обработку на стороне сервера:

foreach (rowA in A)
{
    if (existsInBRowWithID(rowA.id)
    {
        addToResult(rowA.text, getRowInBWithID(rowA.id).text);
        break;
    }
}

ref - Теперь представьте другую таблицу C со столбцами (id, текст) вкоторый является индексом, но не УНИКАЛЬНЫМ.Таблица C содержит следующие данные:

1, John!
1, Jack!

Представьте ref как JOIN между A и C:

select A.text, C.text where A.ID = C.ID

Здесь вы видите псевдокод, иллюстрирующий обработку на стороне сервера:

foreach (rowA in A)
{
    foreach (rowC in C)
    {
        if (rowA.id == rowC.id)
        {
            addToResult(rowA.text, rowC.text);
        }
    }

}

Это СОЕДИНЕНИЕ не такое быстрое, как прежнее, потому что для каждой строки, отсканированной в таблице А, в таблице С есть НЕСКОЛЬКИХ возможных строк, которые могут удовлетворять условию СОЕДИНЕНИЯ (без прерывания вцикл выше).Это потому, что C.ID НЕ УНИКАЛЬНЫЙ.

Надеюсь, это поможет ...

Cheerz!

11 голосов
/ 22 декабря 2010

«Тип» относится к типу соединения, выполненному в вашем запросе. От лучшего к худшему, вот список:

  • система
  • сопзЬ
  • eq_ref
  • исх
  • Диапазон
  • Индекс
  • все

Более подробное объяснение вы найдете в документации по MySQL: http://dev.mysql.com/doc/refman/5.0/en/explain-output.html

...