Что означает EQ ref и ref типы в MySQL объяснить
когда мы префикс SQL-запроса с ключевым словом "explain" мы получаем таблицу с некоторыми столбцами. Пожалуйста, скажите мне, что такое столбец "тип". Что делает eq_ref
и ref
значит в этом контексте.
2 ответов
Я попробую объяснить...
eq_ref – представьте, что у вас две таблицы. Таблица A со столбцами (id, text), где id является первичным ключом. Таблица B с теми же столбцами (id, text), где id является первичным ключом. Таблица А содержит следующие данные:
1, Hello
2, How are
таблица B содержит следующие данные:
1, world!
2, you?
представьте eq_ref как соединение между A и B:
select A.text, B.text where A.ID = B.ID
это соединение очень быстро, потому что для каждой строки, отсканированной в таблице A можно только один строка в таблице B, которая удовлетворяет условию соединения. Один и не более одного. Это потому, что B. id уникален. Вот вам псевдо код, который иллюстрирует обработку на стороне сервера:
foreach (rowA in A)
{
if (existsInBRowWithID(rowA.id)
{
addToResult(rowA.text, getRowInBWithID(rowA.id).text);
break;
}
}
ref - теперь представьте другую таблицу C со столбцами (id, text), в которой id-индекс, но не уникальный. Таблица C содержит следующие сведения:
1, John!
1, Jack!
представьте ref как соединение между 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);
}
}
}
это соединение не так быстро, как предыдущее, потому что для каждой строки, отсканированной в таблице A, есть несколько возможные строки в таблице C, которые могут удовлетворять условию соединения (без разрыва в цикле выше). Это потому, что C. ID не уникален.
надеюсь, это поможет...
Cheerz!
"тип" относится к типу соединения, сделанному в вашем запросе. От лучшего к худшему, вот список :
- система
- const
- eq_ref
- ref
- ряд
- индекс
- все
вы найдете более подробное объяснение в документации MySQL:http://dev.mysql.com/doc/refman/5.0/en/explain-output.html