waa*_*ers 13 mysql database performance myisam innodb
我将记录插入MySQL表,并尝试了解MyISAM表和InnoDB表之间的时间差异.
这是创建表的代码:
CREATE TABLE SpectrumData (
ID INT(11) NULL DEFAULT NULL,
`Set` INT(11) NULL DEFAULT NULL,
Wavelength DOUBLE NULL DEFAULT NULL,
Intensity DOUBLE NULL DEFAULT NULL,
Error INT(11) NULL DEFAULT NULL,
`Status` INT(11) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=xxx
ROW_FORMAT=DEFAULT
Run Code Online (Sandbox Code Playgroud)
我插入10000条记录,以秒为单位测量所需时间并重复100次.我把结果放在两个Excel图表中:

所以MyISAM增加和InnoDB或多或少不变.
谁能解释这些差异?与表中的记录数量有关?为什么这些异常值与InnoDB?
配置二手电脑:
更新:我应该提到我在Access前端应用程序中插入带有VBA脚本的记录.我通过ODBC系统DSN连接到MySQL数据库.
VBA代码:
Dim RsSpectrumData As DAO.Recordset
Dim Db As Database
Dim i As Integer
Dim j As Integer
Dim TimerStart
Set Db = CurrentDb
Set RsSpectrumData = Db.OpenRecordset("SpectrumData")
For i = 1 To 100
TimerStart = Timer
For j = 1 To 10000
With RsSpectrumData
.AddNew
!Set = 1
!Wavelength = 100
!Intensity = 25000
!Error = 0
!Status = 0
.Update
End With
Next
Print #1, Timer - TimerStart
Next
RsSpectrumData.Close
Run Code Online (Sandbox Code Playgroud)
再次更新:
我添加了DAO事务功能,现在10,000个记录的平均InnoDB插入时间从215秒减少到平均1.3秒!(感谢@MarkR):
Dim RsSpectrumData As DAO.Recordset
Dim Db As Database
Dim Ws As DAO.Workspace
Dim i As Integer
Dim j As Integer
Dim TimerStart
Open "C:\TEMP\logtest.txt" For Append As #1
Set Db = CurrentDb
Set Ws = DBEngine.Workspaces(0)
Set RsSpectrumData = Db.OpenRecordset("SpectrumData")
For i = 1 To 20
TimerStart = Timer
Ws.BeginTrans
For j = 1 To 10000
With RsSpectrumData
.AddNew
!Set = 1
!Wavelength = 100
!Intensity = 25000
!Error = 0
!Status = 0
.Update
End With
Next
Ws.CommitTrans
Print #1, Timer - TimerStart
Next
RsSpectrumData.Close
Close #1
Run Code Online (Sandbox Code Playgroud)
要真正看到性能差异,您需要在数据库之上运行一些真实的程序。仅插入一小批记录并不能说明什么。插入速度在很大程度上取决于列数、索引数量、事务模式、数据库约束和其他发生的活动等因素。
| 归档时间: |
|
| 查看次数: |
1209 次 |
| 最近记录: |