यदि किसी कॉलम पर एकाधिक बार UNIQUE कंस्ट्रेंट जोड़ा जाए, तो MySQL हर बार उस कॉलम पर एक नया यूनिक इंडेक्स बना देता है।
उदाहरण
employee टेबल में empid पर पहले से UNIQUE कंस्ट्रेंट है:
mysql> DESCRIBE employee; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | empid | int(11) | YES | UNI | NULL | | | first_name | varchar(20) | YES | | NULL | | | last_name | varchar(20) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+
पहला SHOW INDEX
mysql> SHOW INDEX FROM employee\G Key_name: empid Seq_in_index: 1 Column_name: empid Non_unique: 0 -- 1 इंडेक्स
दूसरा UNIQUE कंस्ट्रेंट जोड़ें
mysql> ALTER TABLE employee ADD UNIQUE(empid); Query OK, 0 rows affected (0.21 sec)
दूसरा SHOW INDEX
mysql> SHOW INDEX FROM employee\G *************************** 1. row *************************** Key_name: empid *************************** 2. row *************************** Key_name: empid_2 -- अब 2 इंडेक्स!
तीसरा UNIQUE कंस्ट्रेंट जोड़ें
mysql> ALTER TABLE employee ADD UNIQUE(empid); Query OK, 0 rows affected (0.30 sec) mysql> SHOW INDEX FROM employee\G Key_name: empid Key_name: empid_2 Key_name: empid_3 -- अब 3 इंडेक्स!
परिणाम सारांश
| UNIQUE जोड़ा गया | इंडेक्स नाम | कुल इंडेक्स |
|---|---|---|
| 1ली बार | empid | 1 |
| 2री बार | empid_2 | 2 |
| 3री बार | empid_3 | 3 |
निहितार्थ
- स्टोरेज ओवरहेड: प्रत्येक इंडेक्स डिस्क स्पेस और मेमोरी उपयोग करता है
- राइट परफॉरमेंस: INSERT/UPDATE/DELETE धीमे होते हैं (प्रत्येक इंडेक्स अपडेट होता है)
- कोई लाभ नहीं: डुप्लिकेट रोकने के लिए एक इंडेक्स पर्याप्त है
- भ्रम: SHOW CREATE TABLE में एकाधिक इंडेक्स दिखते हैं
सफाई
-- अतिरिक्त इंडेक्स हटाएं ALTER TABLE employee DROP INDEX empid_2; ALTER TABLE employee DROP INDEX empid_3;
निष्कर्ष: एक ही कॉलम पर एकाधिक UNIQUE कंस्ट्रेंट जोड़ने से बचें - यह संसाधन बर्बादी है।