在两列上使用order by优化简单的mysql查询
我刚刚开始对我的查询运行explain,看到类型是All,我正在使用filesort 我不知道如何优化哪怕是最简单的查询,如果有人能就以下查询提供指导,该查询仅以用户名为主,以用户名为辅检索用户和订单:在两列上使用order by优化简单的mysql查询,mysql,sql,select,sql-order-by,query-optimization,Mysql,Sql,Select,Sql Order By,Query Optimization,我刚刚开始对我的查询运行explain,看到类型是All,我正在使用filesort 我不知道如何优化哪怕是最简单的查询,如果有人能就以下查询提供指导,该查询仅以用户名为主,以用户名为辅检索用户和订单: SELECT UserID, TRIM(FName) AS FName, TRIM(SName) as SName, pic FROM users WHERE Blocked <> 1 ORDER BY FName, SName LIMIT ?, 10 解释如下: id : 1
SELECT UserID, TRIM(FName) AS FName, TRIM(SName) as SName, pic
FROM users WHERE Blocked <> 1
ORDER BY FName, SName
LIMIT ?, 10
解释如下:
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
如果要优化此查询,可以在where条件下的字段上创建索引
CREATE INDEX id_users_blocked ON users (Blocked) ;
优化取决于阻止1的用户数
如果这些都是少数,就不要考虑粒子的改善。。但在解释中,你不应该看到所有
您也可以在索引字段中添加fname、sname,但使用trim作为方法和字段pic的需要不能使该索引性能更好。。因为如果第一种情况下,通常具有trim等函数的字段不是从索引中获取的,而第二种情况下则不是具有pic等字段的索引。。因此表行的访问是强制性的。如果要优化此查询,可以在where条件下的字段上创建索引
CREATE INDEX id_users_blocked ON users (Blocked) ;
优化取决于阻止1的用户数
如果这些都是少数,就不要考虑粒子的改善。。但在解释中,你不应该看到所有
您也可以在索引字段中添加fname、sname,但使用trim作为方法和字段pic的需要不能使该索引性能更好。。因为如果第一种情况下,通常具有trim等函数的字段不是从索引中获取的,而第二种情况下则不是具有pic等字段的索引。。因此表行的访问是强制性的。添加索引(Blocked、FName、SName)如果可能的话,将位置更改为Blocked=0添加索引(Blocked、FName、SName)
SELECT UserID, TRIM(FName) AS FName, TRIM(SName) as SName, pic
FROM users WHERE Blocked <> 1
ORDER BY FName, SName
LIMIT ?, 10
如果可能,将位置更改为Blocked=0
SELECT UserID, TRIM(FName) AS FName, TRIM(SName) as SName, pic
FROM users WHERE Blocked <> 1
ORDER BY FName, SName
LIMIT ?, 10
在blocked
列上使用INDEX
,可以提高性能。在另一种情况下,索引对您没有帮助
您还为表格的每条记录使用了TRIM
功能。如果将其删除,则会提高性能
当然,排序也会影响查询性能
在blocked
列上使用INDEX
,可以提高性能。在另一种情况下,索引对您没有帮助
您还为表格的每条记录使用了TRIM
功能。如果将其删除,则会提高性能
当然,排序也会影响查询性能。在INSERT上使用TRIM()比在SELECT上使用TRIM()更为优化。所以它只调用一次,而不是每次调用。也许下面的索引将有助于
更改表用户添加索引块\u fname\u sname\u idx(Blocked,fname,sname)
@kio Thank将更新该部分@谢谢,我试过了,但是对解释的结果没有影响。你好像在做“通过偏移量分页”。这会有问题,请参阅。在INSERT上使用TRIM()比在SELECT上使用TRIM()更优化。所以它只调用一次,而不是每次调用。也许下面的索引将有助于更改表用户添加索引块\u fname\u sname\u idx(Blocked,fname,sname)
@kio Thank将更新该部分@谢谢,我试过了,但是对解释的结果没有影响。你好像在做“通过偏移量分页”。这有问题,请参阅。这与将内饰改为镶块一起,为我提供了所需的优化。谢谢大家的回答,在大家之间,我现在更了解它了。这一点,再加上将我的修剪改为插入式,给了我所需要的优化。谢谢大家的回答,我现在更明白了