Я немного нуб, когда речь заходит о sql-запросах, и я только реально работал с базовыми операторами SELECT, UPDATE, DELETE. Теперь мне нужно обновить много строк (50+) в вертикальной таблице, и им работает заявление, как это:Есть ли более эффективный способ запуска нескольких операторов SQL UPDATE
UPDATE `postmeta` SET meta_value = 'John' WHERE `meta_key` = 'name' AND `post_id` = 29230;
UPDATE `postmeta` SET meta_value = 'Johnson' WHERE `meta_key` = 'last_name' AND `post_id` = 29230;
UPDATE `postmeta` SET meta_value = 'www.johnsonsdiner.com' WHERE `meta_key` = 'url' AND `post_id` = 29230;
UPDATE `postmeta` SET meta_value = '[email protected]' WHERE `meta_key` = 'mail' AND `post_id` = 29230;
UPDATE `postmeta` SET meta_value = '12341234' WHERE `meta_key` = 'phone' AND `post_id` = 29230;
... + 45 more
Обратите внимание, что post_id является тем же самым, в то время как meta_key отличается.
Есть ли лучший способ запускать все эти обновления, которые будут иметь лучшую производительность для mySQL? имеет ли значение добавить LIMIT 1 в каждое утверждение?
Любая помощь приветствуется
Моим советом было бы вернуться к правильной нормированной схеме 3NF, тогда вы могли бы сделать всю партию в операторе _one_ update. Эта конкретная схема выглядит так, как те, которые объединены этими ORM, которые дают вам гибкость обновлений псевдосхемы без изменения схемы _actual_ DB за счет более сложных запросов. В 3NF будет таблица с _one_ row для каждого идентификатора сообщения, и она будет содержать имя, last_name и т. Д. В качестве столбцов. – paxdiablo
@paxdiablo - Я знаю. Мне бы это понравилось, если бы я мог изменить схему, но, к сожалению, это не вариант. поэтому я должен найти способ обойти это, не нажимая слишком высокую производительность. –