Я вставляю записи в таблицу 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
Я вставляю 10000 записей, измеряю время в секундах и повторяю это 100 раз. Я поместил результаты в две диаграммы Excel:
Итак, MyISAM увеличивается, а InnoDB более или менее постоянен.
Кто-нибудь может объяснить различия? Что-то делать с количеством записей в таблице? И почему эти выбросы с InnoDB?
Используемая конфигурация компьютера:
ОБНОВЛЕНИЕ: Я должен уже упоминали, что я вставляю записи с помощью сценария VBA во внешнее приложение Access. Я подключаюсь к базе данных MySQL через системный DSN ODBC.
Код 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
ОБНОВЛЕНИЕ СНОВА:
Я добавил функциональность транзакции DAO, и теперь среднее время вставки InnoDB для 10 000 записей уменьшилось с 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