Відповіді:
У гіршому випадку, коли ви переглядаєте неіндексоване поле, використання MIN()
вимагає одного повного проходу таблиці. Використання SORT
і LIMIT
вимагає сортування файлів. Якщо натрапити на великий стіл, то, ймовірно, буде суттєва різниця у оцінюваній ефективності. Як безглуздий пункт даних, MIN()
зайняв .36s SORT
і LIMIT
взяв .84s проти 106000 рядкової таблиці на моєму сервері розробників.
Якщо, однак, ви переглядаєте індексований стовпець, різницю помітити важче (безглузда точка даних становить 0,00 с в обох випадках). Однак, дивлячись на результати пояснення, схоже, MIN()
він може просто вирвати найменше значення з індексу ('Виберіть таблиці, оптимізовані далеко' та 'NULL' рядки), тоді як SORT
і LIMIT
все ще потрібно зробити упорядкований обхід індексу (106 000 рядків). Фактичний вплив на продуктивність, ймовірно, незначний.
Схоже, MIN()
це такий шлях - він у найгіршому випадку швидший, у кращому випадку не відрізняється, є стандартним SQL і найбільш чітко виражає цінність, яку ви намагаєтесь отримати. Єдиним випадком, коли здається, що використання SORT
і LIMIT
було б бажаним, було б, як вже згадувалося mson , де ви пишете загальну операцію, яка знаходить верхнє або нижнє значення N із довільних стовпців, і не варто виписувати операцію в окремому випадку.
SELECT MIN(`field`)
FROM `tbl`;
Просто тому, що він сумісний з ANSI. Обмеження 1 стосується MySql, як TOP для SQL Server.
Як зазначали Мсон і Шон Максомоті , MIN є кращим.
Ще однією причиною корисності ORDER BY + LIMIT є те, що ви хочете отримати значення іншого стовпця, ніж стовпець MIN.
Приклад:
SELECT some_other_field, field
FROM tbl
ORDER BY field
LIMIT 1
Думаю, відповіді залежать від того, що ви робите.
Якщо у вас запит на 1 вимкнення, а намір настільки простий, як ви вказали, переважно вибрати min (поле).
Однак загальновизнано, що ці типи вимог змінюються на - захоплювати верхні n результатів, захоплювати nth - mth результати тощо.
Я не думаю, що це надто жахлива ідея прив’язуватися до вибраної вами бази даних. Зміна баз даних не слід робити легковажно, і потрібно переглядати ціну, яку ви платите, коли робите цей крок.
Навіщо обмежуватись зараз, бо біль, який ти можеш відчувати чи не відчувати пізніше?
Я вважаю, що добре залишатися ANSI якомога більше, але це лише орієнтир ...
Враховуючи прийнятну ефективність, я б використав першу, оскільки вона семантично наближається до наміру.
Якщо продуктивність була проблемою, (більшість сучасних оптимізаторів, можливо, оптимізуватимуть обидва до одного і того ж плану запиту, хоча вам доведеться протестувати, щоб перевірити це), тоді, звичайно, я б використав швидший.