आपको उतनी ही अनुक्रमणिका बनाने की आवश्यकता है जितनी आपको बनाने की आवश्यकता है। न आधिक न कम। यह बहुत ही सरल है।
हर कोई "जानता है" कि एक सूचकांक तालिका पर डीएमएल स्टेटमेंट को धीमा कर देगा। लेकिन किसी कारण से बहुत कम लोग वास्तव में परीक्षण करने के लिए परेशान हैं कि यह उनके संदर्भ में "धीमा" कैसे होता है। कभी-कभी मुझे यह धारणा मिलती है कि लोग सोचते हैं कि एक और इंडेक्स जोड़ने से प्रत्येक डाली गई पंक्ति में कई सेकंड जोड़े जाएंगे, जिससे यह एक गेम बदलते व्यापार व्यापार को बना देगा कि कुछ फिक्टिव हॉटशॉट उपयोगकर्ता को बोर्ड रूम में फैसला करना चाहिए।
मैं एक उदाहरण साझा करना चाहता हूं जिसे मैंने अभी अपने 2 साल पुराने पीसी पर बनाया है, एक मानक MySQL स्थापना का उपयोग कर। मुझे पता है कि आपने प्रश्न SQL सर्वर को टैग किया है, लेकिन उदाहरण आसानी से परिवर्तित किया जाना चाहिए। मैं 1,000,000 पंक्तियों को तीन तालिकाओं में डालता हूं। बिना इंडेक्स, एक इंडेक्स और नौ इंडेक्स के साथ एक तालिका।
drop table numbers;
drop table one_million_rows;
drop table one_million_one_index;
drop table one_million_nine_index;
/*
|| Create a dummy table to assist in generating rows
*/
create table numbers(n int);
insert into numbers(n) values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
/*
|| Create a table consisting of 1,000,000 consecutive integers
*/
create table one_million_rows as
select d1.n + (d2.n * 10)
+ (d3.n * 100)
+ (d4.n * 1000)
+ (d5.n * 10000)
+ (d6.n * 100000) as n
from numbers d1
,numbers d2
,numbers d3
,numbers d4
,numbers d5
,numbers d6;
/*
|| Create an empty table with 9 integer columns.
|| One column will be indexed
*/
create table one_million_one_index(
c1 int, c2 int, c3 int
,c4 int, c5 int, c6 int
,c7 int, c8 int, c9 int
,index(c1)
);
/*
|| Create an empty table with 9 integer columns.
|| All nine columns will be indexed
*/
create table one_million_nine_index(
c1 int, c2 int, c3 int
,c4 int, c5 int, c6 int
,c7 int, c8 int, c9 int
,index(c1), index(c2), index(c3)
,index(c4), index(c5), index(c6)
,index(c7), index(c8), index(c9)
);
/*
|| Insert 1,000,000 rows in the table with one index
*/
insert into one_million_one_index(c1,c2,c3,c4,c5,c6,c7,c8,c9)
select n, n, n, n, n, n, n, n, n
from one_million_rows;
/*
|| Insert 1,000,000 rows in the table with nine indexes
*/
insert into one_million_nine_index(c1,c2,c3,c4,c5,c6,c7,c8,c9)
select n, n, n, n, n, n, n, n, n
from one_million_rows;
मेरे समय कर रहे हैं: अनुक्रमणिका बिना तालिका में
- 1m पंक्तियों: 0,45 सेकंड 1 सूचकांक के साथ तालिका में
- 1m पंक्तियों: 1,5 सेकंड
तालिका में
- 1m पंक्तियों 6,98 सेकंड
मैं सांख्यिकी और गणित की तुलना में एसक्यूएल के साथ बेहतर हूँ, लेकिन मुझे लगता है कि लगता है कि करने के लिए करना चाहते हैं::सूचकांकमेरी तालिका में 8 इंडेक्स जोड़ना, कुल मिलाकर 6,48 सेकंड जोड़ा गया (6,98-1,5)। प्रत्येक सूचकांक ने सभी 1,000,000 पंक्तियों के लिए 0,685 सेकंड (5,48/8) का योगदान दिया होगा। इसका मतलब यह होगा कि प्रति इंडेक्स प्रति पंक्ति जोड़ा गया ओवरहेड 0,000000685 सेकेंड होगा। कुछ लोग निर्देशकों के बोर्ड को कॉल करते हैं!
निष्कर्ष में, मैं कहना चाहूंगा कि उपरोक्त परीक्षण केस एक छल साबित नहीं करता है। यह सिर्फ आज रात दिखाता है, मैं एक एकल उपयोगकर्ता वातावरण में एक तालिका में लगातार 1,000,000 पूर्णांक डालने में सक्षम था। आपके परिणाम अलग होंगे।
* खतरनाक * से आपका क्या मतलब है? मुझे नहीं लगता कि किसी भी मानव जीवन पर कोई फर्क नहीं पड़ता कि आप किसी टेबल पर कितनी अनुक्रमणिका डालते हैं। –
ऐसा लगता है जैसे "थोड़ा ज्ञान एक खतरनाक चीज है": बहुत समय पहले, मेरे नियोक्ता के सीईओ ने सोर्ससेफ के साथ समस्याओं के बारे में एक लेख पर ठोकर खाई थी। अगले हफ्ते, ऑन हाई से किसी भी प्रकार के संस्करण नियंत्रण पर प्रतिबंध लगा दिया गया था, क्योंकि यह "खतरनाक" है। आनंद शुरू हो गयी। – Piskvor
@marc_s: आपको लगता है? मुझे इसके बारे में पता नहीं है, मैंने अपने देव बॉक्स पर एक अवैध एसवीएन सर्वर चलाने और वहां ट्रैक रखने का सहारा लिया है। 'file.php',' file1.php', 'file1_.php',' file_20071101.php' और/या 'file_1piskvor.php' आधिकारिक "संस्करण" योजना थी (यानी इसे वास्तविक चीज़ से अलग नाम दें ; बैकअप? हमें कोई स्टीकिंग बैकअप की आवश्यकता नहीं है!)। अप्रत्याशित परिणाम: "सीईओ फिर से 'ऑप्टिमाइजिंग' चला गया और अब ऐप टूटा हुआ है। क्या आपके पास कुछ फाइलें हैं, ये जानी चाहिए, उन फ़ाइलों के लिए पिछले संस्करण, विंक विंक, नज नज?" (हम कई सालों बाद अंततः एक वास्तविक एसवीएन सर्वर प्राप्त करने में कामयाब रहे)। – Piskvor