我想提高我的mysql搜索性能

时间:2018-07-23 12:54:24

标签: mysql

我想提高搜索性能。我想根据服务和专业搜索用户。根据按专业或服务应用的过滤器列出的用户,或者可以是两个用户。我想从所有表中获取5个表 我有下面的表结构

1) users            :- id ,first_name,last_name 
2) users_services   :- id ,user_id,service_id
3) users_speciality :- id,user_id,specility_id
4) mst_services     :- id,name
5) mst_speciality   :- id,name

我已使用此查询获取结果,并且效果很好。

select  u.id,first_name,last_name,location,services.name as service_name,speciality.name as specility_name from users as u 

inner join  users_services  on u.id =users_services.user_id

Inner join mst_services as services on  services.id=users_services.service_id

inner join  users_speciality  on u.id =users_speciality.user_id
Inner join mst_speciality as speciality on  speciality.id=users_speciality.service_id WHERE speciality.name ="specificity one"
按照规范化

似乎是正确的。但是,当数据超过1,00,000时,连接太多表可能会造成问题。 我该如何根据服务和专业来过滤用户?

1 个答案:

答案 0 :(得分:0)

您尝试过这样吗?

SELECT users.id,first_name,last_name, mst_services.name as service, mst_speciality.name AS speciality
FROM users 
LEFT JOIN users_services ON users.id = users_services.user_id
LEFT JOIN users_speciality ON users.id = users_speciality.user_id
LEFT JOIN mst_services ON service_id = mst_services.id
LEFT JOIN mst_speciality ON speciality_id = mst_speciality.id
WHERE users.id IN
(SELECT user_id FROM users_services
WHERE service_id = (SELECT id FROM mst_services WHERE name = "service one")
UNION ALL
SELECT user_id FROM users_speciality
WHERE speciality_id = (SELECT id FROM mst_speciality WHERE name = "spercial one"))
ORDER BY first_name,last_name,service,speciality