Выберите с объединением нескольких таблиц быстрее - PullRequest
0 голосов
/ 29 марта 2019

Я сделал запрос MySQL, чтобы выбрать данные из другого столбца.Но это займет слишком много времени для результата.Как изменить запрос, чтобы он был быстрее?

(таблицы)

-- tb_computer --

machine_name

ip

mac

emp_no

...

-- tb_user_info--

emp_no

name

company_id

...

Дубликат информации о пользователе отсутствует, но для каждого пользователя могут быть дубликаты данных для компьютера.

SELECT
ui.emp_no, u.name, u.position, d.name as dept_name, u.activeYN
,IFNULL((SELECT over_time FROM tb_work_time wt WHERE wt.emp_no = u.emp_no AND wt.work_date = '$_today'), '') AS over_time
,CASE WHEN ui.updatedTime >= NOW() - INTERVAL 5 minute THEN 'Y' ELSE 'N' END connectYN
,IFNULL(ui.machine_name , '') AS machine_name
,IFNULL((SELECT ip FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS ip
,IFNULL((SELECT mac FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS mac
FROM tb_user_info ui
INNER JOIN tb_user u ON u.emp_no = ui.emp_no
INNER JOIN tb_user_dept ud ON u.emp_no = ud.emp_no
INNER JOIN tb_dept d       ON ud.dept_id = d.dept_id

Из-за того, что часть

,IFNULL((SELECT ip FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS ip
,IFNULL((SELECT mac FROM tb_computer c WHERE c.emp_no = ui.emp_no), '') AS mac

занимает слишком много времени.Если компьютерных данных нет, то я хотел бы просто распечатать пустой ip, mac и остальную информацию.

Например:

emp_no || name || machine_name || ip || mac
1234   || test || computer || 1.1.1.1 || ABCD

1234 || test || computer1 || 1.1.1.2 || FETR

777 || testing || ASUS || 2.2.2.2 || 

888 || ttttt || NON || 3.3.3.3 || MFMFMF

Как вы можете видеть, следует напечатать2 строки, если есть два компьютера для пользователя (A)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...