У меня есть эти структуры таблиц, и, хотя это работает, использование EXPLAIN для определенных SQL-запросов дает «Использование временного; Использование filesort 'на одной из таблиц. Это может снизить производительность, если таблица заполнится тысячами данных. Ниже приведены структура таблицы и пояснения к системе.
CREATE TABLE IF NOT EXISTS `jobapp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fullname` varchar(50) NOT NULL,
`icno` varchar(14) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '1',
`timestamp` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `icno` (`icno`)
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `jobapplied` (
`appid` int(11) NOT NULL,
`jid` int(11) NOT NULL,
`jobstatus` tinyint(1) NOT NULL,
`timestamp` int(10) NOT NULL,
KEY `jid` (`jid`),
KEY `appid` (`appid`)
) ENGINE=MyISAM;
Запрос, который я пробовал, который дает вышеупомянутое утверждение:
EXPLAIN SELECT japp.id, japp.fullname, japp.icno, japp.status, japped.jid, japped.jobstatus
FROM jobapp AS japp
INNER JOIN jobapplied AS japped ON japp.id = japped.appid
WHERE japped.jid = '85'
AND japped.jobstatus = '2'
AND japp.status = '2'
ORDER BY japp.`timestamp` DESC
Эта система предназначена для набора новых сотрудников. После того, как регистрация открыта, сотни заявителей будут зарегистрированы за один раз. Им разрешено выбирать 5 разных работ. Позже, в конце сеанса регистрации, администратор будет проходить каждую работу по очереди. Я использовал одну таблицу (jobapplied) для хранения 2 элементов (идентификатор заявителя, идентификатор задания), чтобы записать, кто и что применял. И это таблица, которая вызывает вышеупомянутое утверждение. Я понимаю, что в этой таблице нет ПЕРВИЧНОГО ключа, но позже я просто не могу найти другого способа, чтобы администратор мог конкретно искать, какую работу подал.
Какой-нибудь совет, как мне оптимизировать стол?