Kacam.net

दुनिया को देखें

डेटाबेस: एक बार में एक टुकड़ा

इसे «इंडेक्स ऑप्टिमाइज़ेशन / ट्रांज़ैक्शन / ट्यूनिंग» की तरह नहीं काटा गया —— इतने चौड़े विषय की उत्तर-कुंजी में बस «सिलेक्टिविटी देखो, लॉक देखो» ही लिखा जा सकता है। यहाँ कट बारीक है: कंपोजिट इंडेक्स में कॉलम का क्रम, एक UPDATE असल में क्या लॉक करता है, OFFSET उस एक कदम में क्या करता है।

ये प्रॉम्प्ट अभी सिर्फ़ 简体中文 में हैं।

इसे कैसे इस्तेमाल करें

यह श्रृंखला सीखने के लिए है: यह राह दिखाती है, कोने में नहीं धकेलती। अटकने पर पहले पूछती है कि किस परत पर अटके हैं (कभी सुना ही नहीं / जानता हूँ पर क्यों नहीं जानता / क्यों जानता हूँ पर लगा नहीं पाता), फिर तय करती है कि क्या देना है। दो बार राह दिखाने के बाद ही सीधे बताती है, और फिर आपसे अपने शब्दों में दोहराने को कहती है।

डिफ़ॉल्ट रूप से यह MySQL / InnoDB के हिसाब से बात करती है —— यहाँ आधे जाल कार्यान्वयन की बारीकियाँ हैं, और क्लस्टर्ड इंडेक्स, टेबल पर वापस जाना और गैप लॉक दूसरी जगह अलग तरह से काम करते हैं। PostgreSQL या कोई और भी चलेगा: पहली ही पंक्ति में बता दें, यह उसी के हिसाब से चलेगी और जहाँ निष्कर्ष बदलते हैं वहाँ बता देगी।

कैसे शुरू करें

  1. एक चुनें, खोलें, प्रॉम्प्ट कॉपी करें।
  2. उसे एक नई खाली चैट में चिपकाएँ और पहली पंक्ति में बताएँ कि कौन-सा डेटाबेस और कौन-सा संस्करण है (न बताएँ तो MySQL 8 मान लिया जाएगा)।
  3. फिर कुछ न कहें और उसके पहले सवाल का इंतज़ार करें।

बीच में कभी भी बोले जा सकने वाले चार शब्द

  • 跳过 तुरंत अगले दृश्य पर
  • 换个说法 इस बिंदु को दूसरे कोण से फिर समझाओ
  • 直说吧 पूरा उत्तर बताओ, फिर मुझसे दोहरवाओ
  • 复盘 सीधे समापन कार्ड पर जाओ

तीन जाल

  • अंत की उत्तर-कुंजी पहले न पढ़ें —— «आम ग़लतफ़हमियाँ» वाला हिस्सा ही हर सवाल का जवाब है।
  • संख्याएँ पूछे जाने के लिए तैयार रहें। «थोड़ा तेज़», «IO बचता है» वहीं काट दिया जाएगा: कितनी पंक्तियाँ? कितनी बार? कितने गुना? बिना संख्या वाला निष्कर्ष रटा हुआ है।
  • जैसे ही यह तारीफ़ शुरू करे, «मेरी तारीफ़ मत करो» वाला नियम याद दिलाएँ। राह दिखाना दुलारना नहीं है।

कंपोजिट इंडेक्स वाली से शुरू करें: यही इस श्रृंखला की नींव है, «लॉक इंडेक्स रिकॉर्ड पर लगते हैं» और «यह इतनी पंक्तियाँ क्यों पढ़ रहा है» दोनों उसी एक वाक्य पर टिके हैं। प्रोडक्शन में कंकरेंसी काट रही हो तो «पढ़कर फिर बदलना» से शुरू करें; क्वेरी धीमी हों तो एग्ज़ीक्यूशन प्लान वाली से।

इंडेक्स

联合索引的顺序
(user_id, status) 这个索引,单查 status 为什么用不上?
★★★☆☆ · लगभग 35 मिनट
它为什么没走索引
索引明明建了,它就是不走 —— 是写废了,还是它算过了?
★★★★☆ · लगभग 35 मिनट
一次查询读了几棵树
一次查询到底读了几棵树、回表几次?
★★★☆☆ · लगभग 30 मिनट

ट्रांज़ैक्शन और लॉक

隔离级别各挡住了什么
RR 下读到余额 100,然后 UPDATE balance = balance - 10 —— 扣完是多少?
★★★★☆ · लगभग 40 मिनट
一条 UPDATE 锁了什么
UPDATE ... WHERE 一个没索引的列 —— 这时候「行锁」还是行锁吗?
★★★★☆ · लगभग 35 मिनट
先查再改,为什么会丢
「包进事务里不就行了」——事务到底挡住了什么?
★★★☆☆ · लगभग 30 मिनट

क्वेरी और पैमाना

读了多少行才吐出这几行
看了执行计划,走索引了 —— 那它扫了多少行、返回几行?
★★★☆☆ · लगभग 35 मिनट
翻到第 5000 页
LIMIT 20 OFFSET 100000 —— 它是怎么找到第 100001 行的?
★★★☆☆ · लगभग 30 मिनट
ये प्रॉम्प्ट ओपन सोर्स हैं मूल पाठ सार्वजनिक रिपॉज़िटरी kacam-net/hero-prompts में रखा जाता है। लगे कि कोई पर्याप्त सख़्ती से नहीं कुरेदता, या उसकी कुंजी में एक पंक्ति छूट गई है, तो जाकर बदल दीजिए — यहाँ चढ़ेगा या नहीं, यह अलग फ़ैसला है और इस तरफ़ की सूची तय करती है।