Наразі я переписую скрипт даних pushвитягує дані з бази даних MSSQL на іншому сервері, а потім вставляє дані в базу даних MySQL. Цей процес cron "ed для запуску нічний і обробляється через PHP.
Оригінальний сценарій TRUNCATE
s таблиць і повторно вставляє всі дані щоночі. Деякі таблиці мають первинні, унікальні ключі, що надходять з бази даних MSSQL. Деяких таблиць немає.
Я розглядаю додавання загальних первинних ключів до таблиць MySQL, які в даний час не мають їх, так що я можу зробити INSERT ... ON DUPLICATE KEY UPDATE
замість спорожнення таблиць і повторного вставлення даних щоночі. Первинні ключі будуть використовуватися лише за іншої причини, ніж цей процес.
Чи буде процес швидше / менш ресурсомістким, якщо я це зробив INSERT ... ON DUPLICATE KEY UPDATE
проти TRUNCATE
і потім INSERT
як зараз працює сценарій? Чи варто турбуватися про створення загальних первинних ключів на таблицях, які в даний час не мають їх просто зробити INSERT ... ON DUPLICATE KEY UPDATE
? Я шукаю найкращу продуктивність цього сценарію.
Відповіді:
0 для відповіді № 1Важко дати загальну відповідь беззнання специфіки ваших даних. Я хотів би знати розмір таблиць у рядках, і якщо ви використовуєте Innodb. Однак, якщо таблиці малі <1000 рядків, і / або не використовуючи Innodb, я б просто залишив як є. Однак, якщо у вас є великі таблиці, я бачив значні поліпшення швидкості за допомогою методу INSERT..ON DUPLICATE.
Хорошим процесом може бути перемикання однієї або двох великих таблиць і вимірювання покращення швидкості. Якщо варто, то продовжуйте роботу з іншими.