समाधान: ALTER TABLE में ADD COLUMN और ADD INDEX
एक ही ALTER TABLE स्टेटमेंट में नया कॉलम और उस पर इंडेक्स दोनों जोड़ें।
सिंटैक्स
ALTER TABLE yourTableName ADD COLUMN yourColumnName dataType, ADD INDEX(yourColumnName);
व्यावहारिक उदाहरण
मूल टेबल
mysql> CREATE TABLE AddColumnAndIndexDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(100),
-> Address VARCHAR(200)
-> );
कॉलम और इंडेक्स जोड़ना
mysql> ALTER TABLE AddColumnAndIndexDemo
-> ADD COLUMN Age INT,
-> ADD INDEX(Age);
Query OK, 0 rows affected (1.81 sec)
अद्यतन टेबल संरचना
mysql> DESC AddColumnAndIndexDemo; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(100) | YES | | NULL | | | Address | varchar(200) | YES | | NULL | | | Age | int(11) | YES | MUL | NULL | | +--------+--------------+------+-----+---------+----------------+
नोट: Key कॉलम में MUL दर्शाता है कि इस कॉलम पर गैर-अद्वितीय इंडेक्स है।
इंडेक्स विवरण देखना
mysql> SHOW INDEX FROM AddColumnAndIndexDemo;
| Table | Non_unique | Key_name | Column_name | Index_type |
|---|---|---|---|---|
| addcolumnandindexdemo | 0 | PRIMARY | Id | BTREE |
| addcolumnandindexdemo | 1 | Age | Age | BTREE |
विविधताएं
अद्वितीय इंडेक्स (UNIQUE)
ALTER TABLE yourTableName ADD COLUMN Email VARCHAR(100), ADD UNIQUE INDEX idx_email (Email);
संयुक्त इंडेक्स
ALTER TABLE yourTableName ADD COLUMN FirstName VARCHAR(50), ADD COLUMN LastName VARCHAR(50), ADD INDEX idx_name (LastName, FirstName);
कॉलम जोड़ने के बाद इंडेक्स बनाना (अलग स्टेटमेंट)
ALTER TABLE yourTableName ADD COLUMN Age INT; CREATE INDEX idx_age ON yourTableName(Age);
प्रदर्शन विचार
- बड़े टेबल पर ALTER TABLE लॉक का कारण बन सकता है
- MySQL 5.6+ ऑनलाइन DDL का समर्थन करता है (कम लॉकिंग)
- पीक घंटों के बाहर चलाएं
- pt-online-schema-change (Percona Toolkit) का उपयोग करें शून्य-डाउनटाइम के लिए