Я уже возился с производительностью запросов для системы с разбивкой по страницам, чтобы сделать выбор данных как можно быстрее, но я столкнулся с чем-то, что я не совсем понимаю. Насколько мне известно, когда используется предел со смещением, MySQL должен перебирать каждую строку перед смещением и затем отбрасывать их, поэтому теоретически запрос со смещением в 10 000 будет намного медленнее, чем один без, что обычно верно так как в этом случаеВыбор MySQL с помощью смещения быстрее, чем без смещения
select SQL_NO_CACHE * from `customers` where `NetworkID`='\func uuid()'
order by `DateTimeAdded` desc limit 0, 100;
/* finishes in 2.497 seconds */
select SQL_NO_CACHE * from `customers` where `NetworkID`='\func uuid()'
order by `DateTimeAdded` desc limit 10000, 100;
/* finishes in 2.702 seconds */
Но, если я использую внутреннее соединение, чтобы соединить таблицу к себе только UserID
колонке для выполнения сортировки и ограничения, это последовательно быстрее с смещением 10000, чем без него, который полностью пьет меня. Например, здесь будет
select SQL_NO_CACHE * from `customers`
inner join (select `UserID` from `customers` where `NetworkID`='\func uuid()'
order by `DateTimeAdded` desc limit 100)
as `Results` using(`UserID`)
/* finishes in 1.133 seconds */
select SQL_NO_CACHE * from `customers`
inner join (select `UserID` from `customers` where `NetworkID`='\func uuid()'
order by `DateTimeAdded` desc limit 10000, 100)
as `Results` using(`UserID`)
/* finishes in 1.120 seconds */
Почему запрос с использованием смещения всегда выполняется быстрее, чем запрос без смещения?
Объясняет:
Я разместил Google Docs таблицы здесь с explains
содержанием here
Примечание: Тесты выше были сделаны в PHP цикл 20 раз каждый
Примечание : customers
- вид, а не базовый стол
попробуйте различные смещения, посмотрите, получится ли у вас одинаковое направление. может быть, это конкретное смещение имеет очень простое соединение. –
У меня есть, если я делаю это с 30 000 даже, он по-прежнему будет последовательно быстрее, чем запрос без смещения. –
'оптимизируйте 'таблицу и посмотрите, одинаково ли это (нейтрализуйте все неизвестные факторы сначала) –