此查询耗时一分钟,大约有500,000条记录
名称是CHAR
userid是唯一的主INT
locked_date是一个表示unix_timestamp的INT
其余为0或1个TINYINT
有关如何使此查询更快的任何提示?
SELECT name,userid
FROM `sn`
FORCE INDEX(unlock_target2)
WHERE `locked` = 1
and `unlocked` = 0
and (back_locked = 0 or back_unlocked = 1)
and flag = 0
and deleted = 0
ORDER BY locked_date ASC
LIMIT 1
说明选择
+----+-------------+-------+------+------------------+------------------+---------+-------------+------+----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+------------------+------------------+---------+-------------+------+----------------------------------------------------+
| 1 | SIMPLE | sn | ref | unlock_target2 | unlock_target2 | 2 | const,const | 6716 | Using index condition; Using where; Using filesort |
+----+-------------+-------+------+------------------+------------------+---------+-------------+------+----------------------------------------------------+
创建
CREATE TABLE `sn` (
`date_added` int(11) NOT NULL,
`userid` bigint(20) NOT NULL DEFAULT '0',
`name` char(30) NOT NULL,
`status` char(15) NOT NULL,
`pool` char(30) NOT NULL,
`flag` tinyint(4) NOT NULL DEFAULT '0',
`turn` int(11) NOT NULL DEFAULT '0',
`deleted` tinyint(4) NOT NULL DEFAULT '0',
`private` tinyint(4) NOT NULL DEFAULT '0',
`media_count` int(11) NOT NULL DEFAULT '-1',
`props_received` int(11) NOT NULL DEFAULT '-1',
`locker_count` int(10) DEFAULT '-1',
`locking_count` int(10) DEFAULT '-1',
`commenter` int(11) DEFAULT '0',
`props` smallint(5) unsigned NOT NULL DEFAULT '0',
`locked_date` int(11) NOT NULL DEFAULT '0',
`locked` tinyint(4) NOT NULL DEFAULT '0',
`unlocked` tinyint(4) NOT NULL DEFAULT '0',
`back_locked` tinyint(4) NOT NULL DEFAULT '0',
`back_unlocked` tinyint(4) NOT NULL DEFAULT '0',
`media_propped` tinyint(4) NOT NULL DEFAULT '0',
`date_propped` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`userid`),
UNIQUE KEY `userid_2` (`userid`),
KEY `userid` (`userid`),
KEY `unlock_target1` (`back_unlocked`,`locked`,`unlocked`,`flag`,`deleted`,`locked_date`),
KEY `unlock_target2` (`locked`,`unlocked`,`back_unlocked`,`flag`,`deleted`,`locked_date`),
KEY `index_locked` (`locked`),
KEY `index_unlocked` (`unlocked`),
KEY `index_back_locked` (`back_locked`),
KEY `index_flag` (`flag`),
KEY `index_deleted` (`deleted`),
KEY `index_locked_date` (`locked_date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;