Использование нескольких соединений в запросе sqlite в C # - PullRequest
0 голосов
/ 28 февраля 2011

Я пытался выполнить запрос вроде:

Insert into Members
SELECT People.id, Names.value., Ages.value FROM People 
LEFT JOIN Names on Names.id = People.id
LEFT JOIN Ages on Ages.id = People.id

Работает нормально при запуске в диспетчере SQLite (пара секунд). Но занимает недопустимое время для выполнения, когда я запускаю его в своей программе (перестал его ждать ...). Я пробовал свою собственную оболочку ExecuteNonQuery (для класса), а также command.ExecuteNonQuery ()

Все остальные запросы (включая объединения / вставки) работают нормально, это только эта часть. Я пытался сделать объединения как представления, tempTables все варианты запросов, которые работают в SQLite Manager, но не мое решение: (

Мои данные в настоящее время содержат только несколько тысяч строк, но по завершении будут превышать миллион. Это единственный запрос как часть импорта данных. Я использую System.Data.SQLite.

Есть ли какие-либо проблемы с выполнением нескольких соединений / больших вставок таким образом? (Мои другие запросы дали гораздо меньшие результаты) Должен ли я исследовать Linq или аналогичный (глядя на связанные вопросы).

Спасибо.

1 Ответ

1 голос
/ 28 февраля 2011

Ваш код передает запрос драйверу SQLite, поэтому, если выполнение запроса из вашего кода выполняется намного медленнее, чем в SQLite Manager, вам следует проверить, есть ли для вас обновления драйверов.

Вы можете попробовать выполнить explain insert into members (...) (explain + весь ваш запрос) как в SQLite Manager, так и из вашего кода, и сравните результаты.Таким образом, вы можете увидеть, выберет ли один из них более эффективную стратегию, чем другой.

Также убедитесь, что у вас есть индексы для всех полей id, поскольку они обеспечивают значительное повышение производительности.

Обычно Linq не должен работать быстрее, чем обычные запросы.

...