Perfilev
Новичок
Ситуация такая: есть табличка с 700,000 записей.
Делаю такой запрос:
С ордером выполняется 25 секунд, без него моментально.
С ордером:
Без ордера:
Если сделать
KEY `SUI` (`status`, `userId`, `id`),
То получаем
Запрос выстреливает моментально, но не возвращает результатов, видимо, из-за (`userId` IS NULL OR `userId` = 1), т.к.
выполняется опять же моментально и возвращает результат.
Что я делаю не так?
PHP:
CREATE TABLE IF NOT EXISTS `icons` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`date` datetime NOT NULL,
`ssId` int(10) unsigned DEFAULT NULL,
`imported` tinyint(1) NOT NULL default '0',
`userId` int(10) NULL DEFAULT NULL,
`status` set('deleted','pending','approved') default "pending",
`dateProcessed` datetime NULL default NULL,
`title` text NOT NULL,
`previewUrl` varchar(512) NOT NULL,
`tags` text NOT NULL,
`json` text NOT NULL,
PRIMARY KEY (`id`),
KEY `SUI` (`status`, `userId`),
KEY `status` (`status`),
KEY `userId` (`userId`)
) ENGINE=InnoDB;
PHP:
SELECT *
FROM `icons`
WHERE `status` = "pending" AND (`userId` IS NULL OR `userId` = 1)
ORDER BY `id` ASC
LIMIT 1
С ордером:
PHP:
id select_type table type possible_keys
1 SIMPLE icons ref_or_null SUI,status,userId
key key_len ref rows Extra
SUI 7 const,const 270075 Using where; Using filesort
PHP:
id select_type table type possible_keys
1 SIMPLE icons ref SUI,status,userId
key key_len ref rows Extra
status 2 const 338774 Using where
KEY `SUI` (`status`, `userId`, `id`),
То получаем
PHP:
id select_type table type possible_keys
1 SIMPLE icons ref_or_null SUI,status,userId
key key_len ref rows Extra
SUI 7 const,const 344665 Using where
PHP:
SELECT *
FROM `icons`
WHERE `userId` IS NULL AND `status` = "pending"
ORDER BY `id` ASC
LIMIT 1
Что я делаю не так?