Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Таблица двойного назначения
 
 автор: Владимир55   (06.01.2013 в 21:52)   письмо автору
 
 

В таблицу добавляются записи с помощью оператора INSERT… ON DUPLICATE KEY UPDATE.
Для осуществления этой операции сразу после создания таблицы выполняется запрос типа ALTER TABLE kattov ADD UNIQUE (producer, artikul, name_tov).
Таким образом обеспечивается достаточно высокое быстродействие и два миллиона записей формируются за вполне приемлемое время.

Вместе с тем возникает необходимость добавления записей оператором INSERT… ON DUPLICATE KEY UPDATE, уникальных по полю GUID, для которых уникальность по комбинации полей producer, artikul, name_tov снимается.

Как это осуществить?

Можно ли выполнить ALTER TABLE kattov ADD UNIQUE (GUID) и потом использовать INSERT… ON DUPLICATE KEY UPDATE?

А при необходимости вновь выполнить ALTER TABLE kattov ADD UNIQUE (producer, artikul, name_tov) и вернуться к уникальности по этим полям?

Приемлема ли эта методика смены уникальности к таблице, содержащей несколько миллионов записей, или это слишком ресурсоемко и будет занимать очень большое время?

  Ответить  
 
 автор: cheops   (06.01.2013 в 22:49)   письмо автору
 
   для: Владимир55   (06.01.2013 в 21:52)
 

А как часто эта операция будет осуществляться? Вообще когда речь заходит о 2 миллионах или большем количестве записей (причем именно на вставку/модификацию/удаление, а не на выборку), становится приемлемым практически все, что хоть как-то ускорит процесс. Вообще можно же не удалять индексы, а просто временно их отключить на момент вставки
ALTER TABLE kattov DISABLE KEYS;

потом, когда вставка записей будет произведена, можно включить индексы обратно
ALTER TABLE kattov ENABLE KEYS;

Это особенно удобно, когда у вас много индексов.

  Ответить  
 
 автор: Владимир55   (07.01.2013 в 00:09)   письмо автору
 
   для: cheops   (06.01.2013 в 22:49)
 

"А как часто эта операция будет осуществляться?"

При самом напряженном варианте 1 раз в час, а в среднем еще реже.

Как я понял Вашу идею, можно первоначально сделанный индекс отключить и обрабатывать таблицу как угодно, а потом индекс включить.

Верно?

Однако вставку тоже хотелось бы осуществлять с помощью INSERT… ON DUPLICATE KEY UPDATE, поскольку добавляется порядка ста тысяч записей и одновременно происходит обновление уже имеющихся. То есть, лучше всего как-бы иметь два индекса (по двум группам полей), и один из них использовать в одном режиме вставки, а другой использовать в другом режиме.

Это осуществимо?

Можно ли индексы отключить ALTER TABLE kattov DISABLE KEYS и тут же, при отключенных индексах, выполнить другую индексацию ALTER TABLE kattov ADD UNIQUE (GUID)?

Потом опять отключить индексы ALTER TABLE kattov DISABLE KEYS и вновь выполнить первоначальную индексацию ALTER TABLE kattov ADD UNIQUE (producer, artikul, name_tov).

Или это так не делается? Или это делается, но не так?

А вообще, может ли у таблицы быть несколько UNIQUE? Как бы поточнее понять существо этого дела... В сети об этом много, но как-то путанно.

  Ответить  
 
 автор: Sfinks   (09.01.2013 в 23:35)   письмо автору
 
   для: Владимир55   (07.01.2013 в 00:09)
 

Несколько UNIQUE быть может.
НО!
Если вы отключите индекс по первым трем полям и добавите неуникальные по этим полям записи, то либо индекс не включится обратно, либо сразу не позволит добавить их. В любом случае это не должно прокатить, т.к. нельзя создать уникальный индекс по неуникальным записям.

Хотя я не проверял.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования