mysql - SQL 优化 - 查询耗时 11 秒

标签 mysql sql query-optimization

查询有效。 10.000 个产品,需要 11 秒。如果我不使用 ORDER BY 只需要 1 秒。但我需要 ORDER BY。

我们可以优化它吗?如何优化?

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

解释:

+----+--------------------+-------+--------+---------------------------------+-----------+---------+-----------------------------+------+----------------------------------------------+
| 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                                  |
+----+--------------------+-------+--------+---------------------------------+-----------+---------+-----------------------------+------+----------------------------------------------+

最佳答案

这会跑得更快吗?

SELECT
    u.urunID,
    i.urunadi,
    u.seo,
    u.stok_kodu,
    u.kstok_sayisi,
    u.stok_sayisi,
    u.goruntuleme,
    SUM(su.adet) AS sadet

FROM
    urunler u
    INNER JOIN urun_isim i        ON u.urunID    = i.urunID
    INNER JOIN siparis_urunler su ON su.urunID   = u.urunID
    LEFT JOIN siparis s           ON s.siparisID = su.siparisID 

WHERE
    u.stok_sayisi <= u.kstok_sayisi
    AND s.durum_id NOT IN (26, 24) 
    AND u.durum = 1
GROUP BY
    u.urunID,
    i.urunadi,
    u.seo,
    u.stok_kodu,
    u.kstok_sayisi,
    u.stok_sayisi,
    u.goruntuleme
ORDER BY 8 DESC

关于mysql - SQL 优化 - 查询耗时 11 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27130029/

相关文章:

mysql - 通过开放的 MYSQL 端口传递 SQL 查询?

php - Cron 作业不运行 php 代码

sql - 如何获取每个空值的行号?

sql - 需要帮助编写查询

mysql - 查询MySQL中的大表

php - 如何在每次迭代中以从上到下的方式旋转数组元素

java - 使用 Java Hibernate 将复合主键映射到外键实体

c# - 我尝试注册时总是遇到此错误

java - 为什么我的查询结果返回 false

mysql - 如何简化此 Wordpress 查询以提高性能?