如何在SQL查询中提高多个联接表的性能

荣达河

如何在提高查询性能的同时获得所需的所有信息。

SELECT 
    tr.id, tr.request_status, tr.note, tr.created_date, 
    c.name AS customer_name, c.mobile_phONe, 
    u.full_name AS created_by_name, tt.name AS ticket_type_name 
FROM  
    ticket_request tr 
LEFT JOIN 
    ticket_type tt ON tt.id = tr.ticket_type_id 
LEFT JOIN 
    users u ON u.id = tr.created_by 
LEFT JOIN 
    customer c ON c.id = tr.customer_id 
WHERE 
    tr.is_deleted != 1 
    AND tr.user_id IN (SELECT u.id FROM users u WHERE u.status = '1') 
GROUP BY 
    tr.id  
ORDER BY 
    tr.created_date DESC 
LIMIT 0,20 

当前,此查询将在7到10秒内运行。

  • ticket_request 表格约有10万行
  • customers 表格约有30万行
  • users表并且ticket_type没有那么多(大约1k行)
里克·詹姆斯

下面的加速技术是省去第LIMIT 一个,然后再去做所有的JOINs

SELECT  tr3.id, tr3.request_status, tr3.note, tr3.created_date,
        c.name AS customer_name, c.mobile_phONe,
        u2.full_name AS created_by_name,
        tt.name AS ticket_type_name
    FROM  
    (
        SELECT  tr1.id
            FROM  ticket_request tr1
            JOIN  users u1  ON u1.id = tr1.created_by
            WHERE  u1.status = '1'
              AND  tr1.is_deleted != 1
            ORDER BY  tr1.created_date DESC
            LIMIT  0,20 
    ) AS tr2
    JOIN  ticket_request AS tr3  ON tr3.id = tr2.id
    JOIN  user AS u2 ON u2.id = tr3.created_by
    LEFT JOIN  ticket_type tt  ON tt.id = tr3.ticket_type_id
    LEFT JOIN  customer c  ON c.id = tr3.customer_id
    ORDER BY  tr3.created_date

JOINs,所述一个中的“衍生自”表TR2,都在触摸只有20行之后; 这是很大的加速。

这可能同样好:

SELECT  d.id, d.request_status, d.note, d.created_date,
        c.name AS customer_name, c.mobile_phONe, d.created_by_name,
        tt.name AS ticket_type_name
    FROM  
    (
        SELECT  tr.id AS tr_id, tr.request_status, tr.note, tr.created_date,
                tr.ticket_type_id, tr.customer_id
                u.full_name AS created_by_name
            FROM  ticket_request tr
            JOIN  users u  ON u.id = tr.created_by
            WHERE  u.status = '1'
              AND  tr.is_deleted != 1
            ORDER BY  tr.created_date DESC
            LIMIT  0,20 
    ) AS d
    LEFT JOIN  ticket_type tt  ON tt.id = d.ticket_type_id
    LEFT JOIN  customer c  ON c.id = d.customer_id
    ORDER BY  d.created_date

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SQL Server中提高while循环插入性能?

来自分类Dev

如何提高sql查询的性能

来自分类Dev

如何在大表上提高基于日期的查询性能?

来自分类Dev

如何在C ++中提高IF语句的性能

来自分类Dev

如何提高多个内连接的查询性能?

来自分类Dev

SQL查询联接多个表

来自分类Dev

使用Pandas从大型HDFStore表中提高查询性能

来自分类Dev

从带有Pandas的大型HDFStore表中提高查询性能

来自分类Dev

如何强制联接顺序以提高MYSQL中的查询性能?

来自分类Dev

如何提高基于字符串的查询联接的性能?

来自分类Dev

如何提高SQL Server Select查询的性能?

来自分类Dev

如何提高SQL Server Select查询的性能?

来自分类Dev

如何提高此SQL Server查询的性能?

来自分类Dev

如何提高SQL Azure查询性能

来自分类Dev

如何提高这个 sql 查询的性能?

来自分类Dev

提高 SQL 查询性能

来自分类Dev

SQL Server:如何提高WHERE子句中具有多个CTE和子查询的查询的性能

来自分类Dev

如何从巨大的表中提高选择性能

来自分类Dev

如何在Virtual Box中提高Ubuntu的性能

来自分类Dev

如何在PolyML中提高阵列基准性能?

来自分类Dev

如何提高从2个表中进行选择的SQL查询的性能

来自分类Dev

sql联接如何联接多个表

来自分类Dev

如何在SQL中按日期范围联接多个表?

来自分类Dev

如何在SQL中联接具有多个条件的表?

来自分类Dev

如何在SQL Server中联接多个表?

来自分类Dev

SQL查询需要提高的性能(1个表)

来自分类Dev

SQL查询出多个联接表数据

来自分类Dev

多个表的SCCM SQL查询联接

来自分类Dev

如何提高oracle查询查找引用表名的性能

Related 相关文章

热门标签

归档