Sample Header Ad - 728x90

MySQL: How to optimize a JOIN on a primary key with Indexes

0 votes
1 answer
54 views
I am looking to optimize a JOIN between tables that uses a small subset of columns in the second table. CREATE TABLE employees ( employee_id bigint NOT NULL, manager_id bigint NOT NULL, org_id bigint NOT NULL, union_id bigint NOT NULL ... PRIMARY KEY (employee_id), INDEX (union_id) ); CREATE TABLE managers ( manager_id bigint NOT NULL, org_id bigint NOT NULL, some_condition boolean NOT NULL, PRIMARY KEY (manager_id) ); Now I want to optimize two types of queries. Both join the tables together on manager_id and org_id, and optionally apply a filter to the some_condition column. SELECT employees.* FROM employees JOIN managers ON (employees.manager_id = managers.manager_id AND employees.org_id = managers.org_id) WHERE (employees.union_id = ? AND managers.some_condition); SELECT employees.* FROM employees JOIN managers ON (employees.manager_id = managers.manager_id AND employees.org_id = managers.org_id) WHERE (employees.union_id = ?); Assuming these are very large tables and employees > manager. I am trying to create an index on managers that will speed up the query. Right now the query is slow because for each row it has to read org_id and some_condition. I want to avoid going to disk if possible. So far I have two indexes that might work: INDEX join_index (org_id,some_condition) INDEX id_join_index (manager_id, org_id, some_condition) My main issue is that MySQL does not use either index in the EXPLAIN statement unless I force it to with use index (...). Which index (if either) will speed up my query, and do I need manager_id in the index to speed up the join if I do not filter on some_condition?
Asked by kingrich123 (1 rep)
Nov 20, 2024, 09:36 PM
Last activity: Nov 21, 2024, 10:00 AM