Как я уже сказал, я использовал установку MySQL по умолчанию, никаких настроек или оптимизации). Да, однорядные вставки. Спасибо за ваш ответ, он также дал мне подсказку: я добавил часть транзакции в код VBA, я не знаю, как транзакции DAO транслируются во вставки MySQL, но это имеет большое значение (с InnoDB), средний время вставки 10000 записей уменьшается с 215 до 1,3 секунды! (Дополню свой вопрос)

авляю записи в таблицу 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?

Конфигурация используемого компьютера:

Windows XP SP3Intel Core2 Duo3,00 ГГц2 ГБ ОЗУMySQL 5.5 CE

ОБНОВЛЕНИЕ: я должен был упомянуть, что я вставляю записи со скриптом 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 для 10000 записей сократилось с 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

Ответы на вопрос(2)

Ваш ответ на вопрос