Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में कई-से-अनेक कनेक्शन के लिए लिंकिंग तालिका को ठीक से कैसे अनुक्रमित करें?

यह इस पर निर्भर करता है कि आप कैसे खोजते हैं।

अगर आप इस तरह खोजते हैं:

/* Given a value from table1, find all related values from table2 */
SELECT *
FROM table1 t1
JOIN table_table tt ON (tt.table_1 = t1.id)
JOIN table2 t2 ON (t2.id = tt.table_2)
WHERE t1.id = @id

तो आपको चाहिए:

ALTER TABLE table_table ADD CONSTRAINT pk_table1_table2 (table_1, table_2)

इस मामले में, table1 NESTED LOOPS में अग्रणी होगा और आपकी अनुक्रमणिका तभी प्रयोग योग्य होगी जब table1 पहले अनुक्रमित किया जाता है।

अगर आप इस तरह खोजते हैं:

/* Given a value from table2, find all related values from table1 */
SELECT *
FROM table2 t2
JOIN table_table tt ON (tt.table_2 = t2.id)
JOIN table1 t1 ON (t1.id = tt.table_1)
WHERE t2.id = @id

तो आपको चाहिए:

ALTER TABLE table_table ADD CONSTRAINT pk_table1_table2 (table_2, table_1)

उपरोक्त कारणों से।

आपको यहां स्वतंत्र सूचकांकों की आवश्यकता नहीं है। एक समग्र सूचकांक का उपयोग हर जगह किया जा सकता है जहां पहले कॉलम पर एक सादा सूचकांक का उपयोग किया जा सकता है। यदि आप स्वतंत्र सूचकांकों का उपयोग करते हैं, तो आप दोनों मूल्यों के लिए कुशलता से खोज नहीं कर पाएंगे:

/* Check if relationship exists between two given values */
SELECT 1
FROM table_table
WHERE table_1 = @id1
  AND table_2 = @id2

इस तरह की क्वेरी के लिए, आपको दोनों स्तंभों पर कम से कम एक अनुक्रमणिका की आवश्यकता होगी।

दूसरे क्षेत्र के लिए एक अतिरिक्त अनुक्रमणिका रखना कभी भी बुरा नहीं होता:

ALTER TABLE table_table ADD CONSTRAINT pk_table1_table2 PRIMARY KEY (table_1, table_2)
CREATE INDEX ix_table2 ON table_table (table_2)

खोजों के लिए प्राथमिक कुंजी का उपयोग किया जाएगा on both values और table_1 . के मान पर आधारित खोजों के लिए , table_2 . के मान के आधार पर खोजों के लिए अतिरिक्त अनुक्रमणिका का उपयोग किया जाएगा ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्थानीय phpMyAdmin क्लाइंट के साथ दूरस्थ सर्वर तक कैसे पहुँचें?

  2. हाइब्रिड क्लाउड डेटाबेस ट्रैफ़िक को कैसे एन्क्रिप्ट करें

  3. MySQL के लिए इष्टतम varchar आकार क्या हैं?

  4. मैसकल सिंगल क्वेरी 3 टेबल में शामिल हों और सभी परिणाम प्राप्त करें

  5. लूप का उपयोग करके प्रत्येक DISTINCT फ़ील्ड मान को केवल एक बार प्रदर्शित करें