【发布时间】:2016-04-11 14:50:57
【问题描述】:
我才刚刚开始对我的查询运行解释,发现类型是 All 并且我正在使用文件排序。
我不确定如何优化即使是最简单的查询,如果有人可以就以下查询提供指导,该查询主要按名字检索用户和订单,其次按姓氏检索:
SELECT UserID, TRIM(FName) AS FName, TRIM(SName) as SName, pic
FROM users WHERE Blocked <> 1
ORDER BY FName, SName
LIMIT ?, 10
表创建如下:
CREATE TABLE IF NOT EXISTS `users` (
`UserID` int(11) NOT NULL,
`FName` varchar(25) NOT NULL,
`SName` varchar(25) NOT NULL,
`Pword` varchar(50) NOT NULL,
`Longitude` double NOT NULL,
`Latitude` double NOT NULL,
`DateJoined` bigint(20) NOT NULL,
`Email` varchar(254) NOT NULL,
`NotificationID` varchar(256) NOT NULL,
`Pic` varchar(500) DEFAULT NULL,
`Radius` int(11) NOT NULL,
`ads` tinyint(1) NOT NULL,
`Type` varchar(5) NOT NULL,
`Blocked` tinyint(4) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=1469 DEFAULT CHARSET=latin1;
解释如下:
id : 1
select_type : SIMPLE
table : users
type : ALL
possible_keys : NULL
key : NULL
key_len : NULL
ref : NULL
rows : 1141
Extra : Using where; Using filesort
【问题讨论】:
-
在 INSERT 而不是 SELECT 上使用 TRIM() 会更优化。所以它只被调用一次,而不是每次。
-
也许下面的索引会帮助
alter table users add index block_fname_sname_idx(Blocked,FName,SName) -
@ôkio 谢谢会更新那部分!
-
@AbhikChakraborty 谢谢,我试过了,但对解释的结果没有影响
-
您似乎正在“通过偏移量进行分页”。这有问题,请参阅my blog。
标签: mysql sql select sql-order-by query-optimization