為了研究效能,所以必須先引入大量的資料,基資料為1600多個,現在執行insert into xn_profile (select * from xn_profile)來不斷增加資料。
其時間分別為0.11sec,0.27sec,0.35sec,0.39sec,1.6sec,3.45sec,7.38sec,27.41sec,46.72sec,99.66sec,大概是線性變化,但是不穩定,尤其7.38到27.41。
[b]在437216的基數上查詢[/b]
select count(*) from xn_profile where university="南京大學";
時間為2.27秒,但是再次查詢相同的卻用了0秒。
隨後在university上建立了索引。
create index university_index on xn_profile(university);
花了44.93秒。
再次執行相同的查詢
select count(*) from xn_profile where university="南京大學";
花了0.06秒
隨後
select count(*) from xn_profile where university="清華大學"
,清華大學比南京大學少得多得多(大概1/100),也只用了0.05秒。
select count(*) from xn_profile where province="江蘇";
在沒有索引的情況下用了2.9秒,查了江西,也是2.79秒。
再去掉索引,花了27.94秒。
[b]隨後將基數上公升到1730000[/b],原資料的4倍
select count(*) from xn_profile where university="東南大學";
用了11.16秒,差不多是2.27秒的4倍,符合順序查詢的規律。
select count(*) from xn_profile;
也用了11.79秒。
此時再次建立索引用了223秒。
然後執行相同的
select count(*) from xn_profile where university="清華大學"
,用了0.13秒,查東南大學用了0.42秒,查南京大學2.03秒。
再增加一倍的資料,356秒(包括建立額外索引的時間),這個時間也不知道是應該怎麼看
才好。[b]基數達到3475000[/b]
再
select count(*) from xn_profile;
用了52.67秒,這個比是11.26秒的5倍,搞不懂了,怎麼會增長這麼快?
select count(1) from xn_profile where university="東南大學";
只用了0.83秒
select count(1) from xn_profile where university="南京大學";
用了4.33秒
我插了一條資料,
insert into xn_profile(university) values("test");
再select count(1) from xn_profile where university="test";
用了0秒,快得一比。
mysql在不同的連線時也會快取查詢結果。
此時,備份該錶,用了將近2分鐘。資料量達820兆,當然都是sql語句,不敢開啟。
結論1、在插入insert操作時時間隨插入量大致是線性變化的。
結論2、mysql會把之前查詢到的結果快取,可以跨連線快取。
結論3、影響索引查詢的主要因素取決於資料量的多少,在資料量整體都不是很大時看不出來,但是資料量很大很大時,就明顯了。貌似是根號關係,即資料量增加x的平方倍,時間增加x倍。
結論4、在順序查詢(無索引的情況下)時,查詢時間主要受查詢時間的影響而非io傳輸的影響。
結論5、我認為順序查詢主要受查詢時間的影響。而索引查詢主要受io資料傳輸的影響。
MySQL資料查詢
1.基本查詢語句 select語句是最常用的查詢語句,它的使用方式有些複雜,但功能卻相當強大。select selection list 要查詢的內容,選擇哪些列 from資料表名 制定資料表 where primary constraint 查詢時需要滿足的條件,行必須滿足條件 2.單錶查詢 單錶...
mysql資料連線查詢 mysql 資料查詢
連線查詢 1.連線 join 也稱 連線,從兩個關係的笛卡爾積中選擇屬性間滿足一定條件的元組。等值連線 為 的連線運算稱為等值連線。從關係r和s的廣義笛卡爾積中選取a b屬性值相等的元組。自然連線 一種特殊的等值連線。要求關係中進行比較的分量必須是同名的屬性組,並且在結果中把重複的屬性去掉。外連線 ...
mysql資料查詢之子查詢
子查詢概念 sub query select select 1 標量子查詢 where 之後寫 確定某乙個值 select from student where c id select idfrom class where grade pm3.1 2 列子查詢 where 之後 寫 in,是一列的所...