資料庫效率
測試用表:
4列,一列為
int型別,2列
varchar,1
列char
新增
往資料庫裡新增資料目前測試了
3個方案
1.根據資料生成
sql語句,直接插入
2.採用
sql傳引數的方式插入
3.採用
datatable
更新的方法
測試結果:
在插入5000
條記錄的時候,方案
1和方案
2的事件都在
2.3s~2.4s
,方案1
比方案2
略快一點,方案
3事件在
12s上下
從**的角度上來看,如果可以預知要儲存的資料裡不帶單引號,用方案
1還可以再加快一點點資料。不過我傾向使用方案2。
測試**:方案1
:直接生成
sql語句
stringbuilder
strsql=new
stringbuilder();
dbmanagersql.executesql(strsql.tostring());
方案2:傳引數
stringbuilder
addstrsql=new
stringbuilder();
sqlparameter parameters = ;
parameters[0].value = model.id;
parameters[1].value = model.string1;
parameters[2].value = model.string2;
parameters[3].value = model.string3;
dbmanagersql.executesql(addstrsql.tostring(),parameters);
方案3:datatable
更新datarow
row = dt.newrow();
row["id"] = model.id;
row["string1"] =
model.string1;
row["string2"] = model.string2;
row["string3"] = model.string3;
dt.rows.clear();
dt.rows.add(row);
dbmanagersql.updatetable(dt,tempsql);
查詢
測試用表:表為新增時的測試用表,表內有
30000
條記錄測試結果:1.用
select top 1
方案比用
select
方案在查單條記錄時候資料要快很多目前測試的比例是
1:2
2.select *
和select
完整列名,就目前的測試結果來看時間比較接近,大約為
1:0.8 3.
從dataset
裡取資料比從
datatable
裡取資料要快很多,基本上是快一倍,這點很是讓人納悶,包括我在
sql查詢返回
dataset
後只返回
dataset
的table[0]
回去,效率也還是一樣的慢,估計問題是出在前台從
dataset
取資料的**經過編譯器特別優化了
測試**:
dataset
取資料**:
dataset
ds=dbmanagersql.query(strsql.tostring(),parameters);
if(ds.tables[0].rows.count>0)
else
datatable
取資料**:
datatable
dt=dbmanagersql.querytable(strsql.tostring(),parameters);
if(dt.rows.count>0)
else
多執行緒併發資料庫訪問效率:
測試環境:還是用上面的表,採用直接插入
sql語句方式新增資料,每個執行緒在測試時插入
3次,每次插入
1000
條資料。底層的資料庫訪問採用
2種訪問方式,乙個是為每次連線建立乙個資料庫連線
, 另外乙個是所用資料庫訪問都採用同乙個連線,每次訪問時用執行緒互斥的進行使用。網路採用
100m
交換機組網的公司網路。
測試結果:
資料庫與測試程式在同一臺電腦
執行緒單連線
多連線時間
cpu 時間
cpu 10
4s100%
3~4100%
208~9
100%
20~24
5%30
13~15s
100%
20~24
5%50
24~27
100%
28~30
25%70
35~39
100%
37~43
40%資料庫與測試程式不在同一臺電腦
執行緒單連線
多連線 時間
cpu 網絡卡
時間cpu
網絡卡10
12s10%5%4
5%13%
2025s
10%5%
11~13
5%8%
3032~38s
15%5%
19~20
5%9%
5055~65
15%5%
24~27
15%11%
7080~90
20%5%
29~32
40%13%
從測試的資料來看單連線和多連線並不能說那乙個更好,只能說要根據實際應用的情況來選擇實際連線方式,因為目前還沒有使用連線池的
c#**,所以沒有針對連線池方案進行測試。
在併發條件下優化查詢最佳的方案應該是優化資料庫
在資料庫與應用程式分離的時候進行併發查詢操作,發現提高查詢資料的瓶頸不在應用程式,而是在資料庫。
字串效率
在生成資料
sql語句的時候,要將多個引數合併到乙個
sql語句中,常用的方法有4個
1.字串直接相加
2.replace 3.
format 4.
stringbuffer
類反正不管怎麼比較方案
1的字串直接相加法絕對絕對是慢的,但也是最容易理解的,建議能用其他方法替換就盡量不用。方案2
和方案3
一般用來替換
sql語句裡的引數,不適用於字串連線。如果只是需要替換乙個字串,用
replace
比較合適,速度比
format
快20%
,如果要替換
2個以上的字串就只使用
format
方法用方案
1和方案
2連線字串,效率相差可以達到
20倍,連線的字串越多
stringbuffer
越顯示出它的效率來,不過可惜的是在連線
5個以下字串的時候,他們的效率差不多。
資料庫一些記錄
資料庫三大正規化 第一正規化 1nf 資料表中的每一列 每個字段 必須是不可拆分的最小單元,也就是確保每一列的原子性。解釋 每一列屬性都是不可再分的屬性值,確保每一列的原子性,如果兩列的屬性相近或相似或一樣,盡量合併屬性一樣的列,確保不產生冗餘資料。第二正規化 2nf 滿足1nf後,要求表中的所有列...
資料庫的一些複習
1.關係資料模型的資料結構,在使用者的觀點下,關係模型中資料的結構就是一張二維表,它由行和列組成 關係必須是規範化的,滿足一定的規範條件 1 最基本的規範條件 關係的每乙個分量必須是乙個不可分割的資料項,不允許表中還有表 2.關係模型的操作和完整性約束 資料操作是集合操作,操作物件和操作結構都是關係...
一些資料庫的操作
建立乙個資料庫 create database database name 刪除乙個資料庫 drop database database name 顯示資料庫 show databases 進入某個資料庫 use database name 建立乙個資料表 create table database...