На этом database (сотрудники из образцов MySQL) Я должен оптимизировать этот запрос, используя индекс:Как оптимизировать мой запрос MySQL с индексом
SELECT t.title,
Avg(s.salary) salario_medio
FROM titles t,
salaries s
WHERE t.emp_no = s.emp_no
AND t.to_date > Now()
AND s.to_date > Now()
GROUP BY t.title
ORDER BY salario_medio DESC;
Я уже создать этот индекс на «зарплате» таблица:
CREATE INDEX to_date_idx ON salaries(to_date);
Но EXPLAIN
дает мне эти строки:
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: s
type: range
possible_keys:PRIMARY,emp_no,to_date_idx
key: to_date_idx
key_len: 3
ref: NULL
rows: 370722
Extra: Using where; Using temporary; Using filesort
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: t
type: ref
possible_keys: PRIMARY,emp_no
key: emp_no
key_len: 4
ref: employees.s.emp_no
rows: 1
Extra: Using where
I им uld, как не использовать Using temporary
и Using filesort
.
INFO:
SHOW CREATE TABLE salaries;
CREATE TABLE `salaries`
(
`emp_no` INT(11) NOT NULL,
`salary` INT(11) NOT NULL,
`from_date` DATE NOT NULL,
`to_date` DATE NOT NULL,
PRIMARY KEY (`emp_no`, `from_date`),
KEY `emp_no` (`emp_no`),
KEY `to_date_idx` (`to_date`)
) engine=myisam DEFAULT charset=latin1 show CREATE TABLE titles;
CREATE TABLE `titles`
(
`emp_no` INT(11) NOT NULL,
`title` VARCHAR(50) NOT NULL,
`from_date` DATE NOT NULL,
`to_date` DATE DEFAULT NULL,
PRIMARY KEY (`emp_no`, `title`, `from_date`),
KEY `emp_no` (`emp_no`)
)
engine=myisam
DEFAULT charset=latin1
Вы не можете избежать сортировки. «ORDER BY» находится в вычисленном столбце. –