C 與資料庫的一些效率測試

2021-06-15 18:55:11 字數 3899 閱讀 2027

資料庫效率

測試用表:

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...