मुझे नहीं लगता कि लॉक किए बिना हटाना संभव है। उस ने कहा, मुझे नहीं लगता कि आप जिस रिकॉर्ड को हटाना चाहते हैं उसे लॉक करना एक समस्या है। दूसरी पंक्तियों को लॉक करने में समस्या क्या होगी। http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html
मैं क्या सुझाव है, कोशिश करते हैं और एक लाख एकल पंक्ति को हटा देता है क्या करना है:
मैं उस विषय यहाँ पर कुछ जानकारी मिल गया। मुझे लगता है कि यदि आप एक ही लेनदेन में उन सभी को करते हैं, तो प्रदर्शन को बहुत ज्यादा नुकसान नहीं पहुंचाया जाना चाहिए। ताकि आप की तरह कुछ मिलेगा:
START TRANSACTION;
DELETE FROM tab WHERE id = 1;
..
..
DELETE FROM tab WHERE id = x;
COMMIT;
आप इस विधि से अधिक की तरह
SELECT CONCAT('DELETE FROM tab WHERE id = ', id)
FROM tab
WHERE <some intricate condition that selects the set you want to delete>
तो लाभ कुछ कर के बजाय करके आवश्यक statments उत्पन्न कर सकते हैं:
DELETE FROM tab
WHERE <some intricate condition that selects the set you want to delete>
कि है पहले दृष्टिकोण में आप केवल उस रिकॉर्ड को लॉक करते हैं जिसे आप हटा रहे हैं, जबकि दूसरे दृष्टिकोण में आप अन्य रिकॉर्ड लॉक करने का जोखिम चला सकते हैं जो पंक्ति के समान सीमा में होता है आप हटा रहे हैं
स्रोत
2010-02-13 14:58:19
क्या इस तालिका में बहुत सारे इंडेक्स हैं? –
कॉलम इंडेक्स जो शर्तों को संभाल लेंगे। फिर साइट पर यातायात कम होने पर हटाएं (@ रात शायद)। –
यह भी देखें http://stackoverflow.com/questions/23193761/delete-operation-locks-whole-table-in-innodb जो अंतराल लॉकिंग का उल्लेख करता है – rogerdpack