मेरा उत्तर यहाँ पढ़ने के लिए समय निकालें:(आपके जैसे ही खंड हैं)
500 मिलियन पंक्तियाँ, 15 मिलियन पंक्ति श्रेणी स्कैन 0.02 सेकंड में।
MySQL और NoSQL:सही चुनने में मेरी मदद करें
फिर अपने टेबल इंजन को इनोडब में निम्नानुसार संशोधित करें:
create table tag_date_value
(
tag_id smallint unsigned not null, -- i prefer ints to chars
tag_date datetime not null, -- can we make this date vs datetime ?
value int unsigned not null default 0, -- or whatever datatype you require
primary key (tag_id, tag_date) -- clustered composite PK
)
engine=innodb;
आप इसके बजाय निम्नलिखित को प्राथमिक कुंजी मान सकते हैं:
primary key (tag_id, tag_date, value) -- added value save some I/O
लेकिन केवल अगर मूल्य कुछ बड़े वर्चर प्रकार नहीं है!
क्वेरी पहले की तरह:
select
tag_date,
value
from
tag_date_value
where
tag_id = 1 and
tag_date between 'x' and 'y'
order by
tag_date;
आशा है कि यह मदद करता है :)
संपादित करें
ओह उल्लेख करना भूल गया - इंजन प्रकार को mysiam से innodb में बदलने के लिए तालिका में परिवर्तन का उपयोग न करें, बल्कि डेटा को csv फ़ाइलों में डंप करें और एक नई बनाई गई और खाली innodb तालिका में पुनः आयात करें।
ध्यान दें कि मैं निर्यात प्रक्रिया के दौरान डेटा ऑर्डर कर रहा हूं - क्लस्टर इंडेक्स कुंजी हैं!
निर्यात करें
select * into outfile 'tag_dat_value_001.dat'
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
from
tag_date_value
where
tag_id between 1 and 50
order by
tag_id, tag_date;
select * into outfile 'tag_dat_value_002.dat'
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
from
tag_date_value
where
tag_id between 51 and 100
order by
tag_id, tag_date;
-- etc...
आयात करें
तालिका में वापस सही क्रम में आयात करें!
start transaction;
load data infile 'tag_dat_value_001.dat'
into table tag_date_value
fields terminated by '|' optionally enclosed by '"'
lines terminated by '\r\n'
(
tag_id,
tag_date,
value
);
commit;
-- etc...