쿼리가 작동합니다. 10.000 개의 procuts로 11 초가 걸립니다. ORDER BY를 사용하지 않으면 1 초 밖에 걸리지 않습니다. 하지만 주문이 필요합니다.SQL 최적화 - 쿼리는 11 초 걸립니다.
최적화 할 수 있습니까?
SELECT
u.urunID,
i.urunadi,
u.seo,
u.stok_kodu,
u.kstok_sayisi,
u.stok_sayisi,
u.goruntuleme,
(SELECT SUM(su.adet) FROM siparis_urunler su LEFT JOIN siparis s ON s.siparisID = su.siparisID WHERE s.durum_id NOT IN (26, 24) AND su.urunID = u.urunID) AS sadet
FROM
urunler u
INNER JOIN urun_isim i ON u.urunID = i.urunID
WHERE
u.stok_sayisi <= u.kstok_sayisi
AND u.durum = 1
GROUP BY
u.urunID
ORDER BY
sadet DESC
LIMIT 0, 20
는 EXPLAIN :
+----+--------------------+-------+--------+---------------------------------+-----------+---------+-----------------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+--------+---------------------------------+-----------+---------+-----------------------------+------+----------------------------------------------+
| 1 | PRIMARY | i | index | PRIMARY,urunadi2 | urunadi | 768 | NULL | 4997 | Using index; Using temporary; Using filesort |
| 1 | PRIMARY | u | eq_ref | PRIMARY,urunID,urunler,urunler2 | PRIMARY | 4 | katalog_db.i.urunID | 1 | Using where |
| 3 | DEPENDENT SUBQUERY | sp | ALL | NULL | NULL | NULL | NULL | 11 | Using where |
| 2 | DEPENDENT SUBQUERY | s | ALL | PRIMARY,siparis | NULL | NULL | NULL | 805 | Using where |
| 2 | DEPENDENT SUBQUERY | su | ref | surunler2 | surunler2 | 10 | katalog_db.s.siparisID,func | 1 | Using where |
+----+--------------------+-------+--------+---------------------------------+-----------+---------+-----------------------------+------+----------------------------------------------+
'sadet'에 대한 색인이 있습니까? – Siyual
이 쿼리 앞에 설명을 추가하고 results.Also 테이블 정의를 추가하여 질문을 편집하십시오. – Mihai
내 첫 번째 대답이 삭제되었습니다. Q : siparis에서 왼쪽 조인을 사용하는 선택 합계()에는 내부 조인으로 강제 실행되는 WHERE 절이 있습니다. SIPARIS_URUNLER와 SIPARIS의 관계와 DURUM_ID 24 또는 26을 제외한 모든 것을 찾는 목적을 명확히 할 수 있습니까? – DRapp