首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql查询优化左连接

mysql查询优化左连接
EN

Stack Overflow用户
提问于 2013-08-24 21:00:56
回答 1查看 70关注 0票数 0

我正在使用下面的mysql查询来获取一些所需的结果,但问题是它需要更多的时间。目前这个查询的执行时间是7456ms,这对我的项目来说是不可接受的,我想优化这个查询,你有什么想法吗?

代码语言:javascript
复制
 SELECT *, DATEDIFF(NOW(),ticketstatus_tbl.updation_date) AS problem_age,images_tbl.image_path
            FROM ticketstatus_tbl 
            LEFT JOIN question_tbl ON ticketstatus_tbl.question_id = question_tbl.question_id 
            LEFT JOIN ticketing_tbl ON ticketstatus_tbl.related_ticket_id = ticketing_tbl.ticket_id
            LEFT JOIN department_tbl ON question_tbl.question_dept = department_tbl.department_id
            LEFT JOIN branch_tbl ON ticketstatus_tbl.branch_id = branch_tbl.id
            LEFT JOIN images_tbl ON images_tbl.question_id = ticketstatus_tbl.question_id and images_tbl.branch_id = ticketstatus_tbl.branch_id
            WHERE (ticketstatus_tbl.ticket_status NOT IN ('Close')
            AND question_tbl.is_active_question = 1
            AND ticketstatus_tbl.display_status = '1'
            AND ticketstatus_tbl.flag_color = 'Yellow'
            AND department_tbl.department_name = 'Admin')order by ticket_number ASC LIMIT 0 ,5

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-08-24 21:07:21

首先,您不需要所有的left outer join,因为您的where子句将撤消其中的大部分。我的猜测是,所有这些都可以转换为内部连接,但至少是:

代码语言:javascript
复制
SELECT *, DATEDIFF(NOW(),ticketstatus_tbl.updation_date) AS problem_age,images_tbl.image_path
FROM ticketstatus_tbl 
            JOIN question_tbl ON ticketstatus_tbl.question_id = question_tbl.question_id 
            LEFT JOIN ticketing_tbl ON ticketstatus_tbl.related_ticket_id = ticketing_tbl.ticket_id
            JOIN department_tbl ON question_tbl.question_dept = department_tbl.department_id
            LEFT JOIN branch_tbl ON ticketstatus_tbl.branch_id = branch_tbl.id
            LEFT JOIN images_tbl ON images_tbl.question_id = ticketstatus_tbl.question_id and images_tbl.branch_id = ticketstatus_tbl.branch_id
WHERE ticketstatus_tbl.ticket_status NOT IN ('Close')
            AND question_tbl.is_active_question = 1
            AND ticketstatus_tbl.display_status = '1'
            AND ticketstatus_tbl.flag_color = 'Yellow'
            AND department_tbl.department_name = 'Admin'
order by ticket_number ASC LIMIT 0 ,5;

其次,您正在对ticketstatus_tbl进行过滤。您应该有一个关于ticketstatus_tbl(display_status, flag_color, ticket_status, question_id)的综合索引。如果可以,请将ticket_status not in ('Close')更改为肯定声明:ticket_status in (Open, 'In Progress', . . .)。这使得使用索引变得更容易。

这是一个开始。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18418876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档