MySQL Index
|यह एक Techinque हैं जिसके द्वारा हम जिस Record को Access करना चाहते हैं उस पर कम से कम Step में पहुँच सके। यानि की यदि हमें कोई भी Record Search करना हैं तो वह बहुत जल्दी हमें मिल सके ।
जब database Table में Record की संख्या बहुत अधिक हो जाती हैं और तब यदि किस Record को Search करना हो तो Sequential Search में बहुत समय लगता हैं । यदि Record किस भी Indexing Technique से Sort होंगे तो Database द्वार उन्हें Search करने में बहुत ही कम समय लगेगा ।
प्रत्येक डेटाबेस के अनुसार अलग अलग तरह एक Index मिल जाते हैं लेकिन यदि आपको सरल भाषा में MySQL के Index के बारे में समझना हो तो हम Index को दो भागो में Divide कर सकते हैं ।
- Clustered Index
- Primary Index
- Unique Index or Unique ( यदि Table में कोई भी Primary के Define नहीं की हो तो यह Index Storage Engine द्वारा बना दिया जाता है इसलिए उस समय यह Clustered Index का कार्य करता हैं और यदि Primary Key होने के बाद यदि हम Unique बनाते हैं तो यह Non-Clustered Index बन जाता हैं ।)
- Non Clustered Index
- Simple Index or Index
- Spatial Index (like Geo Columns)
- FullText index (For Char, Varchar, Text)
आइये अब एक एक कर आपको सभी के बारे में समझते हैं ।
Clustered Index
ऐसे index जो की एक समझने के लिए यह माने के Same Table में ही Store हो जाते है और Physically भी डाटा को उसके Order Wise ही Sort कर लेते हैं, यानि ऐसे index एक से ज्यादा नहीं बना सकते।
Primary Key index इसी का भाग हैं ।
निचे Screen Shot में आप देख सकते हैं की किस तरह Cluster Index main table में ही Sort हो कर Store रहता हैं और यदि आप बाद में भी कोई Entry करते हैं तो उसे उस Location पर Set कर देता हैं यानि की यह Order Permanent ही Store हो जाता हैं Table में ।
Non-Clustered Index
इस तरह के Index एक अलग जगह Store रहते है, और Main Table जिस पर लिखे हैं उसके Data को पॉइंट करते हैं , इसलिए इस तरह एक Index एक Table पर एक से अधिक बना सकते हैं ।
MySQL के Primary के अलावा अन्य सभी Index non-Cluster इंडेक्स ही हैं । उपरोक्त Screen Shot में आप देख सकते हैं की किस प्रकार non-cluster इंडेक्स ने अपने लिये एक अलग Table बनाई हैं और उसमे Data को Sorting order में रख कर Main Table को Point किया हैं ।
- Index
- Unique
- Spatial
- FullText
Primary Index
इस तरह के Index को Cluster Index बोला जाता हैं यह Index Unique तो होते ही हैं साथ में Null Value को Accept भी नहीं करते, जब भी किसी टेबल में Data को Update और Delete करते हैं तो इनका उपयोग करना चाहिए ।
- जब भी किसी भी Table में Primary Key बनाते हैं तब यह Index अपने आप ही बन जाता हैं ।
- कोई भी टेबल बनाये उसमे हमेशा Primary Key बनाना ही चाहिए ।
- कोई भी Record को Update और Delete करने के लिए Primary Key का उपयोग करना चाहिए ।
//Using Table ADD
ALTER TABLE <TableName> ADD PRIMARY KEY (ColumnName);
//Using Table DROP
ALTER TABLE <TableName> DROP PRIMARY KEY;
Unique Index Or Unique
यह भी Non-Cluster Index हैं , यह भी Simple Index जैसा ही हैं इसमें यह विशेषता हैं की यह Duplicate Record accept नहीं करता हैं, इसी कारण इसे Unique Index भी कहा जाता हैं । यह Null Accept कर लेता हैं Primary Index और Unique Index में यह भी एक Difference हैं ।
- Primary के स्थान पर एक Index का उपयोग भी किया जा सकता हैं ।
- यह Null Value को Accept करता हैं ।
//Using Table Add
ALTER TABLE <TableName> ADD UNIQUE <IndexName> (<ColumnName>) ;
//Using Table Drop
ALTER TABLE <TableName> DROP INDEX <IndexName>;
//Using Index Create
CREATE UNIQUE INDEX <IndexName> ON <TableName> (<ColumnName>);
//Using Index Drop
DROP INDEX <IndexName> ON <TableName>;
Unique Index Or Unique
यह भी Non-Cluster Index हैं , यह भी Simple Index जैसा ही हैं इसमें यह विशेषता हैं की यह Duplicate Record accept नहीं करता हैं, इसी कारण इसे Unique Index भी कहा जाता हैं । यह Null Accept कर लेता हैं Primary Index और Unique Index में यह भी एक Difference हैं ।
- Primary के स्थान पर एक Index का उपयोग भी किया जा सकता हैं ।
- यह Null Value को Accept करता हैं ।
//Using Table Add
ALTER TABLE <TableName> ADD UNIQUE <IndexName> (<ColumnName>) ;
//Using Table Drop
ALTER TABLE <TableName> DROP INDEX <IndexName>;
//Using Index Create
CREATE UNIQUE INDEX <IndexName> ON <TableName> (<ColumnName>);
//Using Index Drop
DROP INDEX <IndexName> ON <TableName>;
Simple Index or Index
यह एक तरह से Non-Cluster Index हैं , जो की Table में Store न हो कर एक अलग स्थान पर store हो कर Main Table की Records को पॉइंट करता हैं । अलग जगह Store होने के करना हम एक Table पर एक से अधिक Index लिख पाते हैं ।
- किसी Table की यदि कोई कॉलम ऐसा ही जिस पर हमें Search करना हो या हमें अधिकतर उस Filed से Query करना होती है तो हम इस तरह के Index बनाते हैं ।
- इस तरह के इंडेक्स एक से अधिक भी बना सकते हैं ।
- एक से अधिक Column पर एक साथ इस तरह के Index बना सकते हैं ।
//Using Table ADD
ALTER TABLE <TableName> ADD INDEX <IndexName> (<ColumnName>) ;
//Using Table DROP
ALTER TABLE <TableName> DROP INDEX <IndexName>;
//Using Index
CREATE INDEX <IndexName> ON <TableName> (<ColumnName>);
DROP INDEX <IndexName> ON <TableName>;
Spatial Index
यह index Geo Location को ध्यान में रखकर बनाये गए हैं इस पर R-Tree या Quad Technique से searching होती हैं । Geo Location को इस प्रकार से Arrange कर रखने में Point तक पहुंचने में बहुत ही आसानी होती हैं ।
- जितने भी Spatial Column हैं उन सभी पर हम Spatial Index बना सकते हैं .
- इस Technique से Gio से Related Data की Searching Speed Increase हो जाती हैं ।
- इस इंडेक्स को Special ही Spatial Field के लिए Design किया गया हैं ।
//Using Table
ALTER TABLE <TableName> ADD SPATIAL <IndexName> (<ColumnName>) ;
//Using Table Drop
ALTER TABLE <TableName> DROP INDEX <IndexName>;
//Using Index Create
CREATE SPATIAL INDEX <IndexName> ON <TableName> (<ColumnName>);
//Using Index Drop
DROP INDEX <IndexName> ON <TableName>;
FullText Index
यह भी एक Non-cluster index है जो की यह Char, Varchar, Text आदि Type की Field पर ही Index बनाया जाता हैं , यह index अलग अलग Word को Store कर उन्हें Ranking Provide कर देता हैं और फिर जब हैं उसे MATCH…AGAINST Command के द्वारा आप Search कर सकते है , इस तरह से Search करने से Result बहुत ही जल्दी आता है ।
- Character Type की Field के लिए Special Design किया गया हैं ।
- Text Field की Searching को बहुत ही Fast कर देता हैं
//Using Table Add
ALTER TABLE <TableName> ADD FULLTEXT <IndexName> (<ColumnName>) ;
//Using Table Drop
ALTER TABLE <TableName> DROP INDEX <IndexName>;
//Using Index
CREATE FULLTEXT INDEX <IndexName> ON <TableName> (<ColumnName>);
//Using Index Drop
DROP INDEX <IndexName> ON <TableName>;
Name | Type | NULL | Duplicate | Apply on Data Type |
PRIMARY | CLUSTERED | No | No | ANY |
UNIQUE | CLUSTERED / NON-CLUS. | Yes/No | No | ANY |
INDEX | NON-CLUSTER | Yes | Yes | ANY |
SPATIAL | NON-CLUSTER | Yes | Yes | SPATIAL like Geo Location |
FULLTEXT | NON-CLUSTER | Yes | Yes | CHAR, VARCHAR, TEXT |