INDATE बनाम ALTER टेबल ADD INDEX बना - MySQLism, या SQL Standard?


28

बस एक अजीब मुद्दा सामने आया, जिससे मैं कैसे सूचकांक बनाता हूं, इस पर निर्भर करते हुए एक सूचकांक नाम की आवश्यकता होती है।

http://dev.mysql.com/doc/refman/5.5/en/create-index.html

http://dev.mysql.com/doc/refman/5.5/en/alter-table.html

CREATE INDEX `random_name` ON `my_table` (`my_column`); # Requires an index name

ALTER TABLE `my_table` ADD INDEX (`my_column`); # Does not require an index name

यह मुझे लगता है कि क्रिएट इंडेक्स कॉल, इंडेक्स नाम की आवश्यकता नहीं होनी चाहिए। मैं सोच रहा था कि यह एक MySQLism, या SQL मानक है?

जवाबों:


25

मुझे नहीं लगता कि SQL मानक परिभाषित करता है कि कैसे अनुक्रमित बनाने के लिए सभी को एक

इस विकिपीडिया पृष्ठ का एक उद्धरण :

मानकीकरण

इंडेक्स बनाने के बारे में कोई मानक नहीं है क्योंकि आईएसओ एसक्यूएल मानक भौतिक पहलुओं को कवर नहीं करता है। इंडेक्स डेटाबेस के गर्भाधान के भौतिक भागों में से एक हैं, जैसे भंडारण (टेबलस्पेस या फाइलग्रुप)। RDBMS विक्रेता सभी कुछ विशिष्ट विकल्पों के साथ एक CREATE INDEX सिंटैक्स देते हैं जो ग्राहकों को प्रदान की जाने वाली कार्यक्षमता पर निर्भर करता है।

पोस्टग्रैस मैनुअल यहाँ इसका समर्थन करता है:

SQL मानक में अनुक्रमित के लिए कोई प्रावधान नहीं हैं।

एसओ पर इस संबंधित प्रश्न के तहत अधिक साक्ष्य।


6
MySQL एकमात्र डीबीएमएस है जिसे मैं जानता हूं कि एक स्पष्ट सूचकांक का उपयोग करने की अनुमति देता है ALTER TABLE(कुछ मामले हैं जहां निहित सूचकांक विभिन्न DBMS द्वारा बाधाओं का समर्थन करने के लिए बनाया जाएगा, लेकिन इसका मतलब यह नहीं है)।
a_horse_with_no_name

@a_horse_with_no_name: विधिवत विख्यात। मुझे समझ नहीं आता कि MySQL हमें index_name पास करने के लिए क्यों मजबूर करता है, जब स्पष्ट रूप से यह बिना किसी नाम के संभाल सकता है। यह एक PITA है जिसका नामकरण सूचकांकों से बचने के लिए केवल एक परिवर्तन करने के लिए मजबूर किया जाना है।
माइक परसेल

-1

यदि आप इंडेक्स के लिए कोई नाम नहीं देते हैं, तो MySQL आपके लिए इंडेक्स को स्वचालित रूप से नाम देगा।

ALTER TABLE my_table ADD INDEX (col1);
ALTER TABLE my_table ADD INDEX (col1, col2);
ALTER TABLE my_table ADD INDEX (col2);

SHOW INDEX FROM my_table;

ALTER TABLE ADD INDEXऊपर दिए गए कथन निम्नलिखित अनुक्रमित का उत्पादन करेगा:

  • col1
  • col1_2
  • col2

यदि आप केवल एक कॉलम के साथ एक इंडेक्स बनाते हैं, तो इंडेक्स के लिए एक नाम प्रदान करना आवश्यक नहीं हो सकता है (क्योंकि इंडेक्स का नाम कॉलम नाम के समान होगा)। लेकिन यदि आप कई कॉलम के साथ एक इंडेक्स बनाते हैं, तो इंडेक्स के लिए एक नाम प्रदान करना बेहतर हो सकता है, इसलिए इंडेक्स को पहचानना आसान होगा।

सूचकांक के लिए एक नाम प्रदान करना अच्छा है (और इसे idxसूचकांक के रूप में पहचानने के लिए या इसके साथ कुछ उपसर्ग करें ):

ALTER TABLE my_table ADD INDEX idx_my_column (my_column);

-- or
CREATE INDEX idx_my_column ON my_table (my_column);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.