2011-02-28 8 views
0

J'ai essayé d'exécuter une requête comme:En utilisant plusieurs jointures dans une requête SQLite en C#

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 

Il fonctionne bien lorsqu'il est exécuté dans le gestionnaire SQLite (secondes couple). Mais prend un temps inacceptable à exécuter quand je l'exécute dans mon programme (arrêté de l'attendre ...). J'ai essayé mon propre wrapper ExecuteNonQuery (pour la classe) ainsi que command.ExecuteNonQuery()

Toutes les autres requêtes (jointures/insertions incluses) fonctionnent bien, c'est juste cette partie. J'ai essayé de faire les jointures en tant que vues, tempTables toutes les sortes de variations de requête, qui fonctionnent dans le gestionnaire SQLite, mais pas ma solution :(

Mes données actuellement seulement quelques milliers de lignes, mais seront plus d'un million lorsque Il s'agit d'une requête unique dans le cadre d'une importation de données J'utilise System.Data.SQLite

Y a-t-il des problèmes connus pour faire plusieurs jointures/grandes insertions de cette façon? (mes autres requêtes sont retournées beaucoup plus petites résultats résultat)

Répondre

1

Dois-je enquêter sur Linq ou similaire (regardant questions connexes).

Merci. Votre code passe la requête au pilote SQLite, donc si l'exécution de la requête à partir de votre code est beaucoup plus lente que SQLite Manager, vous devriez vérifier s'il y a des mises à jour de pilotes pour vous.

Vous pouvez essayer d'exécuter explain insert into members (...) (explain + toute votre requête) dans le SQLite Manager et dans votre code, et de comparer les résultats. De cette façon, vous pouvez voir si l'un ou l'autre choisit une meilleure stratégie que l'autre.

Assurez-vous également que vous avez des index sur tous les champs id, puisque ceux-ci offrent un grand avantage de performance.

Linq ne devrait généralement pas être plus rapide que les requêtes régulières.

+0

tas Merci. Je viens de faire les index, les inserts sont super rapides maintenant! Je sais que c'était évident ... Je créais tous mes index à la fois après avoir fait tout mon importation, pensant que je maximiserais les performances de l'insert ... Depuis mon processus d'importation est un insert en vrac efficacement, et l'application est lu une seule fois importé, je suppose que je suis dans l'ensemble je ne suis pas sauver tout le temps ... Merci encore, il était évident et une erreur de noob, mais je besoin de quelqu'un pour me dire :) – DougF

+0

Pourquoi la référence à LINQ? Je ne vois aucun linq dans la question ou la réponse. –

+0

@AndrewArnott "Dois-je enquêter sur Linq ou similaire (en regardant les questions connexes)." voir la dernière ligne de la question. –

Questions connexes