Насколько SQL Server Compact медленнее SQLite?

Возможный дубликат:
производительность SQL Server CE 4.0 сравнение

Я оцениваю, использовать ли SQL Server CE 4 или SQLite в качестве локального кеша для настольного приложения. Я провел простой тест, чтобы увидеть, как они поведут себя под давлением, поскольку скорость очень важна для приложения. Тест состоял из вывода случайных данных в таблицу ниже, а затем их запроса — цикл 500 раз.

CREATE TABLE [Lines] (
    [KeyHash] NVARCHAR(4000) NOT NULL,
    [Method] NVARCHAR(100) NOT NULL,
    [Value] TEXT  NOT NULL,
    [AddedOn] TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,
    Primary Key ([KeyHash], [Method])
)

Код для вставки данных был довольно простым.

using (var conn = GetConnection()) {
  using (var cmd = conn.CreateCommand()) {
    cmd.CommandText = "INSERT INTO Lines(KeyHash, Method, Value) VALUES (@KeyHash, @Method, @Value)";
    PopulateWithRandom(cmd);
    cmd.ExecuteNonQuery();
  }
}

Код для запроса данных тоже был довольно простым.

using (var conn = GetConnection()) {
  using (var cmd = conn.CreateCommand()) {
    cmd.CommandText = "SELECT Value FROM Lines WHERE KeyHash=@KeyHash AND Method=@Method";
    cmd.Parameters.AddWithValue("@KeyHash", key);
    cmd.Parameters.AddWithValue("@Method", method);
    return (string) cmd.ExecuteScalar();
  }
}

Результаты были какие-то сумасшедшие. SQL Server CE завершил работу за 18 секунд, а SQLite — за 4,7 секунды.

Я упустил что-то простое или SQLite намного быстрее?

P.S. Полные результаты:

SQL Server CE 4 
Total: 18032 milliseconds 
Insert: 10069 milliseconds
Query: 6940 milliseconds

SQLite 
Total: 4739 milliseconds 
Insert: 3248 milliseconds 
Query: 496 milliseconds

Я не должен открывать и закрывать соединение (например, используя конструкцию using) при каждой операции.


person AngryHacker    schedule 01.09.2011    source источник
comment
@Дарин Димитров - я не думаю, что результаты связанного вопроса являются законными - они утверждают, что SqlCe почти в 1000 раз быстрее (в некоторых случаях), чем SQLite. Это совсем не то, что я вижу, кроме того, что в этом есть опасно мало смысла.   -  person AngryHacker    schedule 01.09.2011
comment
код тоже не тот. Они используют транзакции. Вы не делаете, но вы должны.   -  person Darin Dimitrov    schedule 01.09.2011
comment
Я видел 4-10-кратную скорость на SQLite по сравнению с CE при больших пакетных операциях и одиночных запросах. SQLite невероятно быстр. Однако основная проблема, с которой я столкнулся, заключается в том, что время запуска CE огромно по сравнению с SQLite. Было ли это учтено.   -  person Deleted    schedule 01.09.2011
comment
@Chris Smith - Возможно, вы что-то поняли - виновником здесь может быть время запуска, потому что я открываю/закрываю соединение при каждой операции.   -  person AngryHacker    schedule 01.09.2011
comment
@Дарин Димитров - Почему я должен использовать транзакцию? Начнем с того, что это одиночная вставка и атомарная природа. Кроме того, одно из сравнений в связанной статье не содержит транзакций.   -  person AngryHacker    schedule 01.09.2011
comment
Держите (или) соединение SQLCE открытым от начала до конца приложения.   -  person ErikEJ    schedule 01.09.2011
comment
@EricEJ Это не тот сценарий, который будет использовать мое приложение, поэтому я нацелился на определенный тип теста.   -  person AngryHacker    schedule 02.09.2011
comment
Но открытие соединения требует времени, затем откройте другое соединение и держите его открытым, пока ваше приложение не закроется!   -  person ErikEJ    schedule 07.09.2011