gpt4 book ai didi

mysql - UNION 或 UNION ALL MYSQL 优化

转载 作者:行者123 更新时间:2023-11-29 18:39:24 37 4
gpt4 key购买 nike

我一直在尝试优化下面的MySQL查询,但没有成功。目前执行最多需要 3 秒:

select count( DISTINCT v.id) from 
(
select sub_jobs.id from sub_jobs, main_jobs where sub_jobs.title LIKE '%abc%' and main_jobs.id=sub_jobs.parent_id

UNION ALL

select sub_jobs.id from sub_jobs, main_jobs where job_title LIKE '%abc%' and main_jobs.id=sub_jobs.parent_id

UNION ALL

select sub_jobs.id from sub_jobs, main_jobs, companies where companies.company_name LIKE '%abc%' and main_jobs.company_id=companies.id and main_jobs.id=sub_jobs.parent_id
)
as v

我想做什么:

  • 在 3 个表的三列中搜索关键字并返回非重复计数

基本表结构:

1。子工作

  • ID
  • 标题[我要搜索此栏目]
  • parent_id

2。 main_jobs

  • ID
  • job_title [我要搜索此栏]
  • company_id [某些行没有此列的条目]

3.公司

  • ID
  • company_name [我要搜索此列]

解释一下

------column titles------

id
select_type:
table
type
possible_keys
key
key_len
ref
rows
Extra

--- row 1 ----

id: 1
select_type: PRIMARY
table: <derived2>
ALL
NULL
NULL
NULL
NULL
102642
NULL


---- row 2 ----

id: 2
select_type: DERIVED
table: main_jobs
index
PRIMARY,id_index,id_industry_featured_index
id_index
4
NULL
34214
Using index


---- row 3 ----

id: 2
select_type: DERIVED
table: sub_jobs
ref
parent_id,parent_id_category_index
parent_id
4
myjobmag_myjobdb.main_jobs.id
1
Using where


---- row 4 ----

id: 3
select_type: UNION
table: main_jobs
ALL
PRIMARY,id_index,id_industry_featured_index
NULL
NULL
NULL
34214
Using where

---- row 5 ----

id: 3
select_type: UNION
table: sub_jobs
ref
parent_id,parent_id_category_index
parent_id
4
main_jobs.id
1
Using index

---- row 6 ----


id: 4
select_type: UNION
table: main_jobs
ALL
PRIMARY,id_index,id_industry_featured_index
NULL
NULL
NULL
34214
NULL

---- row 7 ----

id: 4
select_type: UNION
table: companies
eq_ref
PRIMARY
PRIMARY
4
main_jobs.company_id
1
Using where


---- row 8 ----

id: 4
select_type: UNION
table: sub_jobs
ref
parent_id,parent_id_category_index
parent_id
4
main_jobs.id
1
Using index


---- row 9 ----

id: NULL
select_type: UNION RESULT
table: <union2,3,4>
ALL
NULL
NULL
NULL
NULL
NULL
Using temporary

我尝试过使用 UNION 而不使用 DISTINCT,但没有取得显着的效果。

如何减少此查询的运行时间。

最佳答案

您可以尝试使用带有 or 的单个查询来代替带有 union 的 3 个查询

但是你应该看看解释计划

    select count(dictinnct sub_jobs.id )
from sub_jobs
INNER JOIN main_jobs on main_jobs.id=sub_jobs.parent_id
INNER JOIN companies on main_jobs.company_id=companies.id
where companies.company_name LIKE '%abc%'
OR main_jobs.job_title LIKE '%abc%'
OR sub_jobs.title LIKE '%abc%'

关于mysql - UNION 或 UNION ALL MYSQL 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45042042/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com