আমি একটি অ্যাপ্লিকেশন লিখছি যা প্রয়োজন বর্ধিত সময়ের জন্য ডাটাবেসটিতে প্রচুর পরিমাণে আপডেট ফ্লাশ করা দরকার এবং কীভাবে কীভাবে এই প্রশ্নটি অনুকূল করা যায় সে সম্পর্কে আমি আটকে গিয়েছি। বর্তমানে আমি ব্যবহার করছি INSERT INTO ... VALUES (..), (..) ON DUPLICATE KEY UPDATE
, যা সমস্ত মানকে একটি ক্যোয়ারিতে ব্যাচ করতে কাজ করে তবে বড় টেবিলগুলিতে ধীরে ধীরে কার্যকর করে। আমার কখনই সারি সন্নিবেশ করার দরকার নেই।
আমি যে অন্যান্য পন্থাগুলি দেখেছি সেগুলি ব্যবহার করে আপডেট করা হয় SET value = CASE WHEN...
(যেভাবে আমি প্রশ্নগুলি তৈরি করছি তার ফলে উত্পন্ন করা শক্ত হবে, এবং CASE
শত / হাজার হাজার কীগুলির পারফরম্যান্স সম্পর্কে আমি নিশ্চিত নই ), এবং কেবল একাধিক সংক্ষিপ্ত আপডেট। এগুলির দুটিই কি আমার বর্তমান পদ্ধতির চেয়ে দ্রুততর হবে?
এটি আমাকে অবাক করে দেয়, যতদূর আমি বলতে পারি, মাইএসকিউএলে এটি করার কোনও বুদ্ধিমান, দক্ষ উপায় নেই। সত্যিই যদি এর থেকে দ্রুততর কোনও রাস্তা না থাকে ON DUPLICATE KEY
তবে PostgreSQL এ স্যুইচ করে এর UPDATE FROM
সিনট্যাক্সটি ব্যবহার করা কি উপযুক্ত হবে ?
অন্য যে কোনও পরামর্শেরও প্রশংসা করা হয়!
সম্পাদনা করুন: এখানে এমন একটি সারণী যা ঘন ঘন আপডেট হয়। অপ্রাসঙ্গিক হওয়ার কারণে আমি কলামের নামগুলি সরিয়েছি।
CREATE TABLE IF NOT EXISTS `table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`a` bigint(20) unsigned NOT NULL DEFAULT '0',
`b` bigint(20) unsigned NOT NULL DEFAULT '0',
`c` enum('0','1','2') NOT NULL DEFAULT '0',
`d` char(32) NOT NULL,
-- trimmed --
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `b` (`b`),
KEY `c` (`c`),
KEY `d` (`d`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;