2009-12-01 2 views
2

Я хочу сделать много вложений (скажем, пару миллионов) в базу данных как можно быстрее. Поскольку я звоню с C, я думал, что в API может быть ярлык для этого. Я не могу не чувствовать, что создание строк из данных и SQLite синтаксический анализ строк назад, все в одном вызове, менее эффективны, чем это могло бы быть.Самый быстрый способ вставки в SQLite с использованием C API?

Есть ли способ вставить данные без необходимости создавать строки SQL? Готовые заявления - единственный способ?

Я ищу C-специфические способы вставки данных в наиболее эффективным образом, а не общие советы базы данных

+1

Я предполагаю, что стоимость создания/разбора строк sql довольно мала по сравнению с, например, disk-io. – Kimble

ответ

6

начать транзакцию в коде, и все вставки будут происходить в памяти перед записью диск на фиксации. (Возможно, вам нужно будет обмануть это в зависимости от того, сколько памяти у вас есть, и сколько данных вы вставляете) Это будет наибольшее увеличение производительности, которое вы увидите.

В противном случае, если он вставлен в ту же таблицу, переформатируйте свои данные по одной строке за один раз до одной и той же инструкции после каждой вставки, чтобы предотвратить накладные расходы на обработку текста. Однако по сравнению с транзакциями это будет относительно незначительным. Большая часть времени вставки будет записана на диске ...

4

DROP INDEX, INSERT, ADD/REBUILD INDEX.

Другая общая методика SQL для больших вставок - это отбросить индекс, вставить ваши записи x000 и затем перестроить индекс. Если у вас достаточно вставленных записей, вы можете найти это значительно быстрее. Вам может понадобиться сравнить эту базу данных с вашей базой данных, чтобы узнать, быстро ли это будет для вашей установки.

2

Возможно получить более 90 000 вставок в секунду с SQLite и C (это число падает до 60 000 вставок в секунду, если у вас есть индекс). Вы должны:

  • Используйте одну транзакцию
  • использовать подготовленные заявления и методы связывания отката жуРнАЛа
  • Введена в память (если можно)
  • падения индекса и переиндексация после данных вставлено
  • Прочитайте этот так вопрос для более подробной информации: "How do I improve the performance of SQLite?" *

    * бесстыдной плагин: у меня было много одних и тех же вопросов производительности, когда я начал используя SQLite - поэтому я попытался создать полную запись Wiki (с реальными ориентирами и реальным кодом C) на основе моего опыта.

Смежные вопросы