PHP+MYSQL中的排序查询性能

PHP+MYSQL中的排序查询性能,mysql,performance,indexing,Mysql,Performance,Indexing,我有一张有大量记录的桌子。当我在查询中使用ORDERBY时,特别是从特定的表进行查询时,它会占用太多的执行时间 如何优化此表以进行排序和搜索 以下是我的表格作业的示例方案: 我已经搜索了一段时间,我了解到创建索引有助于提高性能,有人能详细说明如何提高性能吗?在查询之前添加解释词,并检查结果 explain select .... 在那里,你可以看到需要改进的地方,然后在搜索和/或排序字段上添加索引,并再次运行解释查询如果你想在请求中获得性能,一种方法是分页。因此,您可以根据需要设置限制并指定要

我有一张有大量记录的桌子。当我在查询中使用ORDERBY时,特别是从特定的表进行查询时,它会占用太多的执行时间

如何优化此表以进行排序和搜索

以下是我的表格作业的示例方案:


我已经搜索了一段时间,我了解到创建索引有助于提高性能,有人能详细说明如何提高性能吗?

在查询之前添加解释词,并检查结果

explain select ....

在那里,你可以看到需要改进的地方,然后在搜索和/或排序字段上添加索引,并再次运行解释查询

如果你想在请求中获得性能,一种方法是分页。因此,您可以根据需要设置限制并指定要显示的页面

例如,从_表中选择*限制50偏移0


我不知道这个答案是否对你的问题有帮助,但你可以试试看

索引是数据库创建查找树的方法,在大多数情况下,B-树可以更有效地排序、筛选和查找行

索引用于快速查找具有特定列值的行。 如果没有索引,MySQL必须从第一行开始,然后读取 通过整个表查找相关行。越大越好 表中,这项成本越高。如果表中有列的索引 毫无疑问,MySQL可以快速确定要搜索的位置 数据文件的中间部分,而不必查看所有数据。 这比按顺序读取每一行要快得多。

您可以使用来帮助确定查询当前的运行方式,并确定需要改进的方面。重要的是不要对一个表过度索引,原因可能超出了这个问题的范围,所以最好对索引的有效使用进行一些研究

ALTER TABLE jobs
    ADD INDEX(created_at);
是的,有一个createindex语法可以实现相同的功能

然后,在查询中,执行以下操作:

ORDER BY created_at DESC
但是,对于15米的行,可能仍然需要很长时间。你要去哪里?限制

如果你真的想返回给用户15万行,那么,这是一个很大的网络流量,这将需要很长时间

MySQL详细信息

无论索引声明或版本如何,都将遵循ORDER BY中的ASC/DESC。但是,它可能需要文件排序,而不是利用索引的BTree中内置的排序

在某些情况下,WHERE或GROUP BY对于优化器使用任何索引来说都非常混乱。但如果可以,那么

在MySQL 8.0之前,虽然可以声明索引DESC,但该属性被忽略。然而,订单由。。德斯克很荣幸;它向后扫描数据。这也适用于ORDER BY DESC、b DESC,但如果ORDER BY中混合了ASC和DESC,则不适用


MySQL 8.0创建DESC索引;也就是说,包含索引的BTree是“向后”存储的。

您可以输入mysql查询代码吗?表中有多少行?@RickJames 100 fieldsalmost@StormTrooper-示例表有5行3列。你是说整张桌子有100列?还有多少行?@RickJames大约1500万行你能告诉我如何在created_at字段上创建索引来对它们进行排序吗?@oles,你能告诉我如何为排序和搜索添加索引吗?你能告诉我如何为排序和搜索添加索引吗?语法是[表][列]上创建索引[索引名称];然而,对于不同的类型有很多选择,重要的是找到一个对您的模式和用法最有意义的。你能给我一个例子,说明我创建的_at字段上的order by DESC吗?索引查询应该创建什么?我主要获取有限的记录,但对于某些情况,如统计或报告,我获取大量数据,不是所有行,而是lot@StormTrooper-我们的答案含糊不清,因为我们没有太多的工作要做。如果您想获得更详细的帮助,请提供查询、显示创建表和解释选择……我使用Mongodb索引,在Mongodb中我用于在时间戳字段上添加索引描述。所以它会在db级别对记录进行排序,所以在这种情况下,当我按降序查询记录时,速度会快得多,因为db中的记录已经排序了。我们不能用mysql做类似的事情吗?@Stormthoper-mysql的工作方式不同。我补充了我的答案。
ORDER BY created_at DESC