Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在两列上使用order by优化简单的mysql查询_Mysql_Sql_Select_Sql Order By_Query Optimization - Fatal编程技术网

在两列上使用order by优化简单的mysql查询

在两列上使用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

我刚刚开始对我的查询运行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_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将更新该部分@谢谢,我试过了,但是对解释的结果没有影响。你好像在做“通过偏移量分页”。这有问题,请参阅。这与将内饰改为镶块一起,为我提供了所需的优化。谢谢大家的回答,在大家之间,我现在更了解它了。这一点,再加上将我的修剪改为插入式,给了我所需要的优化。谢谢大家的回答,我现在更明白了