Я перенес пользовательский веб-сайт на WordPress, и сначала мне нужно перенести данные с предыдущего веб-сайта, а затем каждый день мне приходится вносить некоторые данные с помощью API.
Данные, которые я люблю вставлять, поставляются с уникальным идентификатором, представляющим одну футбольную игру.
Чтобы не вставлять одну и ту же игру несколько раз, я создал таблицу БД со следующей структурой:
CREATE TABLE `ss_highlight_ids` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`highlight_id` int(10) unsigned zerofill NOT NULL DEFAULT '0000000000',
PRIMARY KEY (`id`),
UNIQUE KEY `highlight_id_UNIQUE` (`highlight_id`),
KEY `highlight_id_INDEX` (`highlight_id`) COMMENT 'Contains a list with all the highlight IDs. This is used as index, and dissalow the creation of double records.'
) ENGINE=InnoDB AUTO_INCREMENT=2967 DEFAULT CHARSET=latin1
и когда я пытаюсь вставить новую запись в мою базу данных WordPress, я сначала хочу просмотреть эту таблицу, чтобы увидеть, существует ли идентификатор уже.
Вопрос сейчас 🙂
Что предпочтительнее? Чтобы загрузить все идентификаторы с помощью одного SQL-запроса, а затем использовать обычный PHP, чтобы проверить, существует ли текущий идентификатор игры, или лучше запросить в БД какую-либо отдельную строку, которую я вставляю?
Я знаю, что MySQL Queries являются дорогостоящими ресурсами, но, с другой стороны, в настоящее время у меня есть около 3 тыс. Записей в этой таблице, и в течение следующих нескольких лет эта величина превысит 30-40 тыс., Поэтому я не знаю, является ли это хорошей практикой загрузить все эти записи в PHP?
Каково ваше мнение / предложение?
ОБНОВЛЕНИЕ № 1
Я только что обнаружил, что моя таблица имеет размер 272 КБ с 2966 строкой. Это означает, что в ближайшей функции кажется, что она будет иметь размер около ~ 8000 КБ + и будет продолжаться.
ОБНОВЛЕНИЕ № 2
Может быть, я не сделал это слишком ясно. Для первой вставки мне нужно добавить в файл CSV около 12K записей, а после вставки CSV каждый день я буду вставлять около 100–200 записей. Все эти записи требуют поиска в таблице с идентификаторами.
Таким образом, точный вопрос состоит в том, лучше ли создавать 12K запросов в MySQL при вставке CSV, а затем около 100-200 запросов MySQL каждый день или просто загружать идентификаторы в память сервера и использовать PHP для поиска?
Ваша таблица имеет столбец id
это auto_increment, это означает, что нет необходимости вставлять что-либо в этот столбец. Это заполнит это само.
highlight_id
является UNIQUE
так что это может быть PRIMARY KEY
; избавиться, если id
,
PRIMARY KEY
это UNIQUE
ключ является INDEX
, Так что это избыточно:
KEY `highlight_id_INDEX` (`highlight_id`)
Вернуться к вашему вопросу … SQL есть предназначенный делать вещи партиями. Не побеждайте это, делая вещи по одному за раз.
Как размер таблицы может составлять 272 КБ, если в ней всего два столбца и 2966 строк? Если в таблице больше столбцов; показать им. Часто есть хорошие подсказки о том, что вы делаете, и о том, как сделать это более эффективным.
2966 строк «тривиально»; вам придется внимательно посмотреть, чтобы увидеть различия в производительности.
Загрузка из CSV …
Если это замена, используйте LOAD DATA, создавая новую таблицу, затем RENAME, чтобы поставить ее на место. Один CREATE, один LOAD, один RENAME, одна DROP. Гораздо эффективнее, чем 100 запросов любого рода.
Если CSV — это обновления / вставки, ЗАГРУЗИТЕ во временную таблицу, затем выполните INSERT ... ON DUPLICATE KEY UPDATE ...
выполнять обновления / вставки в реальную таблицу. Один CREATE, один LOAD, один IODKU. Гораздо эффективнее, чем 100 запросов любого рода.
Если CSV-это что-то еще, пожалуйста, уточните.