Розумійте свої вимоги до розробки схеми (якщо можливо).
Дізнайтеся про дані, 1) індексування 2) тип використовуваного сховища, 3) двигун або функції постачальника; тобто ... кешування, можливості пам'яті 4) типи даних 5) розмір таблиці 6) частота запитів 7) пов'язані робочі навантаження, якщо ресурс розділений 8) тест
А) Вимоги будуть різними. Якщо обладнання не може підтримувати очікуване навантаження, слід переоцінити, як забезпечити вимоги в навантаженні. Стосовно стовпця додавання до таблиці. Якщо база даних підтримує представлення даних, ви можете створити індексований (?) Перегляд конкретних даних за допомогою визначених стовпців з назвою (проти вибору '*'). Періодично переглядайте свої дані та схему, щоб переконатися, що ви ніколи не стикаєтеся з синдромом "Сміття" -> "Сміття".
Якщо припустити, що іншого рішення не існує; ви можете взяти до уваги наступне. Завжди існує безліч рішень проблеми.
1) Індексація: вибраний * виконає таблицюможна. Залежно від різних факторів, це може включати пошук диска та / або суперечку з іншими запитами. Якщо таблиця багатоцільова, переконайтеся, що всі запити виконуються та виконуються нижче, ніж у вас є цільовий час. Якщо є велика кількість даних, і ваша мережа чи інший ресурс не налаштовано; це потрібно врахувати. База даних - це спільне середовище.
2) тип зберігання. Тобто, якщо ви використовуєте SSD, диск або пам'ять. Часи вводу / виводу та навантаження на систему / процесор будуть різними.
3) Чи може DBA настроїти базу даних / таблиці для підвищення продуктивності? Припускаючи з будь-якої причини, команди вирішили, що вибір "*" є найкращим рішенням проблеми; чи можна завантажувати БД або таблицю в пам'ять. (Або інший метод ... можливо, відповідь був розроблений так, щоб відповісти із затримкою на 2-3 секунди? --- а реклама грає, щоб отримати прибуток компанії ...)
4) Почніть з базової лінії. Розуміння типів даних та способів подання результатів. Менші типи даних, кількість полів зменшує кількість повернених даних у наборі результатів. Це залишає ресурси доступними для інших системних потреб. Системні ресурси зазвичай мають обмеження; "завжди" працювати нижче цих меж, щоб забезпечити стабільність та передбачувану поведінку.
5) розмір таблиці / даних. вибір "*" є загальним для крихітних таблиць. Зазвичай вони вписуються в пам'ять, і час реакції швидко. Знову ж таки .... перегляньте свої вимоги. План функціонального повзучості; завжди плануйте поточні та можливі майбутні потреби.
6) Частота запитів / запитів. Будьте в курсі інших навантажень в системі. Якщо цей запит спрацьовує щосекунди, а таблиця крихітна. Набір результатів може бути розроблений для збереження в кеші / пам'яті. Однак якщо запит є частим пакетним процесом із гігабайт / терабайт даних ..., можливо, вам буде краще виділити додаткові ресурси, щоб не впливати на інші робочі навантаження.
7) Супутні навантаження. Зрозумійте, як використовуються ресурси. Чи виділена мережа / система / база даних / таблиця / додаток чи спільна інформація? Хто є зацікавленими сторонами? Це для виробництва, розробки чи забезпечення якості? Це тимчасова «швидка поправка». Ви протестували сценарій? Ви здивуєтеся, скільки проблем може існувати на поточному обладнання сьогодні. (Так, продуктивність швидко ... але дизайн / продуктивність все ще погіршується.) Чи потрібно системі виконувати 10K запитів в секунду проти 5-10 запитів в секунду. Виділений сервер бази даних чи інші програми, моніторинг виконується на спільному ресурсі. Деякі програми / мови; O / S споживають 100% пам'яті, викликаючи різні симптоми / проблеми.
8) Тест: Перевірте свої теорії та зрозумійте, наскільки ви можете. Вибір "*" проблеми може бути великою справою, або це може бути щось, про що навіть не потрібно хвилюватися.
SELECT COUNT(*)
бути поганим неймовірно старе і застаріло . Докладніше проSELECT *
- дивіться: stackoverflow.com/questions/1960036/…