Ich muss eine Abfrage optimieren, die von einem Speichervorgang (Abfrage einfügen) in einer Domänenentität erzeugt wird. Ich habe NHibernate mit Fluent NHibernate konfiguriert.
Hier ist die Abfrage, die von NHibernate beim Einfügen einer Benutzerantwort auf eine Umfrage generiert wurde:
%Vor% Wenn man sich die Eingabeparameter für IpAddress
und CountryCode
ansieht, merkt man, dass NHibernate nvarchar(4000)
verwendet . Das Problem ist, dass nvarchar(4000)
ist viel größer als ich entweder für IpAddress
oder CountryCode
brauche und aufgrund der hohen Anforderungen an Datenverkehr und Hosting muss ich die Datenbank für die Speichernutzung optimieren.
Hier die Fluent NHibernate-Auto-Mapping-Überschreibungen für diese Spalten:
%Vor%Dies ist nicht der einzige Ort, an dem ich unnötiges nvarchar (4000) sehe.
Wie kontrolliere ich NHibernate die Verwendung von nvarchar(4000)
für die Darstellung von Strings?
Wie ändere ich diese insert
-Anweisung, um die richtigen Eingabeparameter zu verwenden?
Geben Sie Type
als NHibernateUtil.AnsiString
mit einem Length
an, anstatt einen CustomSqlType zu verwenden.
Dieses Problem kann zu einem schwerwiegenden Leistungsproblem in Abfragen führen, wenn SQL Server gezwungen ist, eine Tabellensuche durchzuführen, anstatt einen Index zu verwenden. Wir verwenden varchar in unserer gesamten Datenbank, also habe ich eine Konvention erstellt, um den Typ global festzulegen:
%Vor%Hier ist eine Umgehung, wenn Sie alle nvarchar durch varchar
ersetzen möchten %Vor%Schließen Sie es an Ihre Konfiguration an
%Vor%Tags und Links sql-server hibernate nhibernate fluent-nhibernate nhibernate-mapping