2017-07-21 4 views
0

Ich habe Abfragen wie unten (für dasselbe Ergebnis beabsichtigt) und ich möchte die Abfrage optimieren, so dass es die CPU-Auslastung des Datenbankservers reduziert.Wie verbessert man die SQL-Abfrage?

Ich habe zwei verschiedene Abfragen unten ausprobiert und es scheint, dass zwei Abfragen ähnliche Leistung haben. (überprüft mit SHOW PROFILES)

Jeder Rat oder Vorschlag wäre willkommen.

Vielen Dank im Voraus.

Information:

Table A has 7333 rows  
Table B has 5656 rows  
Table C has 1108 rows  
Table D has ~150 rows (keep changing)  
Table E has 18576 rows 

Query1:

SELECT A.ct, A.res, A.ctype, A.cweight, B.lat, B.lng, C.first, C.second, C.third 
FROM A 
JOIN B 
ON A.ct= B.dct 
JOIN C 
ON A.ct = C.dct 
LEFT JOIN 
( 
SELECT D.dct 
FROM D 
JOIN E 
ON D.oct = E.oct 
WHERE E.oct is null 
OR (E.oct is not null 
AND E.wua <> '') 
) as K 
ON A.ct = K.dct 
WHERE A.type = 1 AND B.lng != '' AND B.lat != '' AND A.black != 1 AND B.modi_time > (NOW() + INTERVAL 8 HOUR) 
ORDER BY A.ct DESC 

Query2:

SELECT A.ct, A.res, A.ctype, A.cweight, B.lat, B.lng, C.first, C.second, C.third 
FROM A 
JOIN B 
ON A.ct = B.ct 
JOIN C 
ON A.ct = C.dct 
WHERE A.type = 1 AND B.lng != '' AND B.lat != '' AND A.black != 1 AND B.modi_time > (NOW() + INTERVAL 8 HOUR) 
AND A.ct NOT IN ( 
SELECT D.dct 
FROM D 
JOIN E 
ON D.oct = E.oct 
WHERE E.wua <> '' 
) 
ORDER BY A.ct DESC; 
+0

Die erste Abfrage - das Problem könnte die OR-Bedingung sein. Die zweite Frage - ich würde NOT IN mit NOT EXISTS revirite. Natürlich müssen Sie Indizes (e.wua) und Ausführungspläne überprüfen. –

+0

Verwenden Sie UNION anstelle von OR. NICHT IN sollte vermieden werden. – money

+0

Indizierung sollte auf allen gleichwertigen Feldern und nur auf indizierten Feldern erfolgen, Gleichstellung sollte da sein, sonst wird es nur mit Tabellenscan enden. –

Antwort

0

Aus meiner Erfahrung, versuchen, eine Variable für den Wert (NOW() + INTERVAL 8 Stunde), dann verwenden Sie die Variable in der Abfrage zu erklären, wie:

AND B.modi_time>@variable 

könnte dies Ihre Abfrageleistung verbessern.

Verwandte Themen