У меня есть этот запрос:
SELECT p.prodno AS id,
proddesc AS label
FROM product p
JOIN sales s
ON s.custno = 00800
AND s.deptno = 0
AND s.prodno = p.prodno
GROUP BY p.prodno
ORDER BY p.prodno ASC
Объяснение возвращает это:
+---+-----------+------+--------+------------------------------------------------------------------------------+------------+------+----------------------------------------+------+---------+------------------------------------+
| 1 | 'SIMPLE' | 'p' | 'ALL' | 'PRIMARY' | '' | '' | '' | 481 | 100.00 | 'Using temporary; Using filesort' |
| 1 | 'SIMPLE' | 's' | 'ref' | 'PRIMARY,in_sales_custnodeptnoprodno,in_sales_deptnocustno,in_sales_custno' | 'PRIMARY' | '6' | 'const,const,bkp_teststats2.p.PRODNO' | 93 | 100.00 | 'Using index' |
+---+-----------+------+--------+------------------------------------------------------------------------------+------------+------+----------------------------------------+------+---------+------------------------------------+
Как видите, в первой строке для PRODNO не используется индекс, но схема таблицы имеетиндекс по нему.
CREATE TABLE IF NOT EXISTS `product` (
`PRODNO` decimal(4,0) unsigned zerofill NOT NULL DEFAULT '0000',
`PRODDESC` char(21) NOT NULL DEFAULT '',
`UPCCODE12` decimal(12,0) unsigned zerofill NOT NULL DEFAULT '000000000000',
PRIMARY KEY (`PRODNO`)
)
И продажи имеют следующие ключи:
PRIMARY KEY (`CUSTNO`,`DEPTNO`,`PRODNO`,`ARDATE8N`),
KEY `in_sales_custnodeptnoprodno` (`CUSTNO`,`DEPTNO`,`PRODNO`),
KEY `in_sales_deptnocustno` (`DEPTNO`,`CUSTNO`),
KEY `in_sales_custno` (`CUSTNO`),
Я хотел бы отбросить Using temporary; Using filesort
, потому что вышеуказанный запрос занимает 14 секунд для таблицы данных 50G.
Обновление:
Проблема: я хочу получить уникальный список продуктов, в котором есть данные о продажах для данного custno и deptno.