2016-06-09 10 views
0

Ich habe eine Funktion, die langsamer ist als Schmutz im Internet Explorer, aber schnell in Firefox. Ich verwende ein Select *, weil es alles in der Tabelle verwendet. Ich habe versucht, das * herauszunehmen und nur alle Spalten aufzulisten, aber dann bricht es, weil ich zwei Tabellen verwende. Ich war neugierig, ob mir jemand helfen könnte, dieses Problem zu beheben. (Ich verwende MSSQL 2012)Entfernen * in Abfragen beim Aufruf von zwei Tabellen

<!--- Display Table for DataTables ---> 
<cffunction name="displayTable" access="public" returntype="query"> 
    <cfset var processTable = ''> 
    <cfquery name="processTable"> 
     SELECT * 
     FROM dbo.Dealer_Track_Work, dbo.Dealer_Track_Dealers 
     WHERE dbo.Dealer_Track_Work.dealerID = dbo.Dealer_Track_Dealers.id  
    </cfquery> 
    <cfreturn processTable> 
</cffunction> 

Dealer_Track_Work Tabelle
enter image description here

Dealer_Track_Dealers
enter image description here

Ich habe versucht, alle Spalten in beiden Reihen wie folgt aufrufen:

<!--- Display Table for DataTables ---> 
<cffunction name="displayTable" access="public" returntype="query"> 
    <cfset var processTable = ''> 
    <cfquery name="processTable"> 
     SELECT id, dealerID, Date_Received, op_id, Date_Due, Date_Complete, Completed_Late, Closed_by, Rmks, Processing_Location, Item_Count, Name 
     FROM dbo.Dealer_Track_Work, dbo.Dealer_Track_Dealers 
     WHERE dbo.Dealer_Track_Work.dealerID = dbo.Dealer_Track_Dealers.id  
    </cfquery> 
    <cfreturn processTable> 
</cffunction> 
+0

Erhalten Sie einen Fehler, wenn Sie alle Spalten auflisten? – nscheaffer

+3

* langsamer als Schmutz in Internet Explorer, aber schnell in Firefox * Abfragen werden auf dem Datenbankserver ausgeführt, nicht auf dem Client. Der Browser hat also nichts mit der Abfragegeschwindigkeit zu tun. Wenn Sie einen Unterschied im Verhalten des Browsers feststellen, sollten Sie prüfen, wie die Daten an den Client zurückgegeben werden. – Leigh

+0

dort beide Verarbeitung der Seite um 1.43s aber firefox dauert nur 1/2 Sekunde, um die Seite zu laden und Internet Explorer dauert 15 Sekunden ... ich weiß nicht einmal, wo ich anfangen soll =/Ich habe alle Select * entfernt und sicher, dass ich Ich habe nur Spalten aufgerufen, die benötigt werden ... Ich kann den Internet Explorer nicht beschleunigen, oder? lol –

Antwort

4

Der Versuch, id oder Rmks auszuwählen, ist mehrdeutig, da beide Tabellen solche Spalten enthalten. Wenn Sie sie abfragen möchten, sollten Sie sie vollständig qualifizieren, wie Sie in der where Klausel getan haben:

SELECT dbo.Dealer_Track_Dealers.id, -- Here! 
     dealerID, 
     Date_Received, 
     op_id, 
     Date_Due, 
     Date_Complete, 
     Completed_Late, 
     Closed_by, 
     dbo.Dealer_Track_Dealers.Rmks, -- And here 
     Processing_Location, 
     Item_Count, 
     Name 
FROM dbo.Dealer_Track_Work, dbo.Dealer_Track_Dealers 
WHERE dbo.Dealer_Track_Work.dealerID = dbo.Dealer_Track_Dealers.id  
+0

Mehr als eine Spalte ist mehrdeutig - Sie könnten bemerken, dass "Rmks" in beiden –

+0

@PaulSturm kommt, netter Fang, danke. Bearbeitete meine Antwort entsprechend. – Mureinik

+0

Es wäre auch sinnvoll, hier einen korrekten Join anstelle der veralteten Syntax vorzuschlagen, die verwendet wird. –

5

Sind Sie sicher, dass die SQL-Abfrage ist das Problem? Es klingt wie Unterschiede in der Geschwindigkeit, mit der Browser die Ergebnisse wiedergeben, eher Ihr Problem. Verwenden Sie SQL Profiler oder SSMS, um Ihre Abfrage direkt für die Datenbank auszuführen und die Statistiken anzuzeigen. Wenn die Abfrage schnell ausgeführt wird, müssen Sie Ihre Optimierungsbemühungen an anderer Stelle konzentrieren.

In Bezug auf Ihr SQL müssen Sie die Spaltennamen oder Aliasnamen für Ihre Tabellen entweder vollständig qualifizieren, um Spaltennamen bei der Ausführung eines Joins angeben zu können. Außerdem empfehle ich implizite Joins aufgrund der Lesbarkeit in komplexeren Abfragen.

SELECT dtw.id, 
    dtw.dealerID, 
    dtw.Date_Received, 
    dtw.op_id, 
    dtw.Date_Due, 
    dtw.Date_Complete, 
    dtw.Completed_Late, 
    dtw.Closed_by, 
    dtw.Rmks, 
    dtw.Processing_Location, 
    dtw.Item_Count, 
    dtd.Name 
FROM dbo.Dealer_Track_Work dtw 
JOIN dbo.Dealer_Track_Dealers dtd ON dtw.dealerID = dtd.dealerID 
+2

.. und speziell in Bezug auf cfquery müssen SELECTs den gleichen Spaltennamen nicht mehrmals zurückgeben. Wenn Sie aus irgendeinem Grund tatsächlich beide benötigen, müssen Sie eine * Spalte * Alias, so dass die beiden Spalten unterschiedliche Namen haben. Andernfalls gibt CF nur die Werte aus einer der Spalten zurück. – Leigh

2

Zusätzlich zu allem, was bereits gesagt wurde, könnte es eine Möglichkeit geben, Ihre Seite schneller zu rendern. Ich werde den Ansatz beschreiben. Du kannst es versuchen. Verwenden Sie in ColdFusion <cfsavecontent>, um den Anzeigecode für Ihre Abfrageergebnisse in einer Variablen zu speichern. Verwenden Sie dann toScript(), um diese CF-Variable in eine Javascript-Variable zu konvertieren.

Platzieren Sie in HTML einen leeren <div> Container auf Ihrer Seite. Verwenden Sie abschließend javascript, um den Inhalt des div durch die von Ihnen erstellte JavaScript-Variable zu ersetzen.