Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Имеется таблица users, состоящая из строковых идентификаторов id (VARCHAR);
('aaa'), ('bbb'), ... и т.д. до 2 млн. штук, при этом id не повторяются;
Выполняем запрос на добавление к исходной таблице новых id:
('ааа'), ('xxx'), ('bbb'), ('yyy')... и т.д. до 2K штук в одном запросе;
После добавления исходная таблица должна иметь вид:
('ааа'), ('bbb'), ('xxx'), ('yyy')... повторяющиеся id не добавляются;
Также нужно сделать выборку id, которые были добавлены в результате предыдущего запроса:
('xxx'), ('yyy')...
Необходимо максимально ускорить добавление и выборку новых идентификаторов.
Если нужно добавить еще одно поле в таблицу или использовать TEMPORARY TABLE - не вопрос.
Главный критерий - скорость.
Сейчас использую такой запрос (для этого полю id присвоил тип UNIQUE, таблица типа InnoDB):
Неактивен
А у вас в реальности так запрос и выглядит - вставка только идентификаторв? Или там еще какие то поля вставляются? если да - то по ним есть индексы? Если да, то попробуйте перед вставкой пачки выполнить ALTER TABLE DISABLE KEYS и ALTER TABLE ENABLE KEYS после.
Если это не поможет, то вам скорее всего надо думать в сторону ускорения I/O.
Отредактированно Shopen (01.04.2013 21:56:52)
Неактивен
Shopen,
в таблице только одно поле id.
остальные - если нужны, то только в роли вспомогательных, по которым потом делать выборку последних добавленных (например, timestamp или auto_increment).
id - должно быть как минимум UNIQUE, иначе не будет работать INSERT IGNORE
если перед вставкой делать ALTER TABLE DISABLE KEYS, как же тогда будут отфильтровываться дубликаты при вставке?
Неактивен
есть такое промежуточное решение.
в таблице users (тип InooDB) 2 поля:
id - varchar(22), primary key;
time - timestamp, по умолчанию CURRENT_TIMESTAMP (поле вспомогательное - нужно исключительно чтобы выводить выборку последних добавленных в таблицу значений).
сценарий выглядит примерно так :
Отредактированно alexey980 (02.04.2013 21:01:25)
Неактивен
alexey980 написал:
в таблице только одно поле id.
остальные - если нужны, то только в роли вспомогательных, по которым потом делать выборку последних добавленных (например, timestamp или auto_increment).
Так они есть или нет "остальные" поля? Приведите результат команды SHOW CREATE TABLE users
alexey980 написал:
id - должно быть как минимум UNIQUE, иначе не будет работать INSERT IGNORE
если перед вставкой делать ALTER TABLE DISABLE KEYS, как же тогда будут отфильтровываться дубликаты при вставке?
ENABLE/DISABLE KEYS не влияет на работу уникальных индексов
Отредактированно Shopen (02.04.2013 20:35:11)
Неактивен
Shopen,
сейчас таблица такая:
Отредактированно alexey980 (02.04.2013 21:06:18)
Неактивен
Страниц: 1