У меня острый вопрос о mysql ...
Идея здесь состоит в том, чтобы выбрать n последних записей из таблицы с фильтрацией по свойству (возможно, из другой таблицы).Это просто.
В этот момент вы хотите ответить:
let n = 10
SELECT *
FROM huge_table
JOIN another_table
ON another_table.id = huge_table.another_table_id
AND another_table.some_interesting_property
ORDER BY huge_table.id DESC
LIMIT 10
Без соединения все нормально, mysql читает индекс с конца и trow10 элементов, время выполнения незначительно. При объединении время выполнения становится зависимым от размера таблицы и во многих случаях не пренебрежимо мало. Объяснение гласит: «Использование где; Использование индекса; Использование временного; Использование сортировки файлов»
Документация MySQL (http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html) гласит:
"Вы объединяете много таблиц, и столбцы в ORDER BY не все из первой непостоянной таблицы, котораяиспользуется для извлечения строк. (Это первая таблица в выводе EXPLAIN, которая не имеет константного типа соединения.) "
, объясняющая, почему MySQL не может использовать индекс для разрешения моего ORDER BY, предпочитаяогромная сортировка файлов ...
Мой вопрос: естественно ли использовать ORDER BY ... LIMIT 10 для получения последних предметов? Вы действительно делаете это, когда выбираете последние 10 карт в порядке возрастания карты?колода?Лично я просто выбираю 10 снизу ...
Я перепробовал много возможностей, но все закончилось, и я пришел к выводу, что я действительно быстро опрашиваю 10 первых элементов и медленно опрашиваю 10 последних причин предложения ORDER BY.
Может ли "Выбрать последние 10" действительно быстро?Где я не прав?