Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Mysql 优化查询而不是按顺序使用_Mysql_Sql - Fatal编程技术网

Mysql 优化查询而不是按顺序使用

Mysql 优化查询而不是按顺序使用,mysql,sql,Mysql,Sql,我想运行一个简单的查询来获取表中最早的n条记录。它有一个创建日期列 我怎样才能不使用order by来获得它呢。这是一个非常大的表,在整个表上使用orderby只获取n条记录并不是很有说服力 假设n您可以使用Group By对一些数据进行分组,然后使用Having子句来选择特定记录。您可以使用Group By对一些数据进行分组,然后使用Having子句来选择特定记录。我以前没有测试过这个概念,但尝试在creation_date列上创建索引。它将按升序自动对行进行排序。然后,您的select查询可

我想运行一个简单的查询来获取表中最早的n条记录。它有一个创建日期列

我怎样才能不使用order by来获得它呢。这是一个非常大的表,在整个表上使用orderby只获取n条记录并不是很有说服力


假设n您可以使用Group By对一些数据进行分组,然后使用Having子句来选择特定记录。

您可以使用Group By对一些数据进行分组,然后使用Having子句来选择特定记录。

我以前没有测试过这个概念,但尝试在creation_date列上创建索引。它将按升序自动对行进行排序。然后,您的select查询可以使用orderby creation_date desc和Limit 20来获取前20条记录。数据库引擎应该意识到索引已经完成了排序工作,实际上不需要排序,因为索引已经在保存时对其进行了排序。它所需要做的就是从索引中读取最后20条记录


值得一试。

我以前没有测试过这个概念,但是尝试在creation\u date列上创建一个索引。它将按升序自动对行进行排序。然后,您的select查询可以使用orderby creation_date desc和Limit 20来获取前20条记录。数据库引擎应该意识到索引已经完成了排序工作,实际上不需要排序,因为索引已经在保存时对其进行了排序。它所需要做的就是从索引中读取最后20条记录

值得一试。

在创建日期创建一个索引,并使用order by creation\u date asc | desc limit n进行查询,响应速度将非常快,事实上,它不会更快。对于最新的n场景,您需要使用desc

如果您想对该查询施加更多约束,例如state='LIVE',那么查询可能会变得非常慢,您需要重新考虑索引策略。

在创建日期创建索引,并使用order by creation_date asc | desc limit n进行查询,并且响应会非常快,事实上,它不会更快。对于最新的n场景,您需要使用desc


如果您希望对该查询施加更多约束,例如,where state='LIVE',那么查询可能会变得非常缓慢,您需要重新考虑索引策略。

当您关心性能时,您可能不应该过早放弃使用order

这样的查询可以实现为由适当索引支持的Top-N查询,运行速度非常快,因为它不需要对整个表进行排序,甚至不需要对selecte行进行排序,因为数据已经在索引中排序

例如:

select *
  from table
 where A = ?
 order by creation_date 
 limit 10;
如果没有适当的索引,如果你有大量的数据,它会很慢。但是,如果创建这样的索引:

create index test on table (A, creation_date );
查询将能够以正确的顺序开始提取行,而无需排序,并在达到限制时停止

配方:将where列放入索引中,然后是order by列

如果没有where子句,只需将ORDERBY放入索引中即可。order by必须与索引定义匹配,尤其是在存在混合asc/desc订单的情况下

索引Top-N查询是性能之王,请确保使用它们

我有几个链接可以进一步阅读我所有的:

以甲骨文为中心


尚未涵盖Top-N查询,但将于2011年发布。

当您关心性能时,您可能不应该过早放弃使用order

这样的查询可以实现为由适当索引支持的Top-N查询,运行速度非常快,因为它不需要对整个表进行排序,甚至不需要对selecte行进行排序,因为数据已经在索引中排序

例如:

select *
  from table
 where A = ?
 order by creation_date 
 limit 10;
如果没有适当的索引,如果你有大量的数据,它会很慢。但是,如果创建这样的索引:

create index test on table (A, creation_date );
查询将能够以正确的顺序开始提取行,而无需排序,并在达到限制时停止

配方:将where列放入索引中,然后是order by列

如果没有where子句,只需将ORDERBY放入索引中即可。order by必须与索引定义匹配,尤其是在存在混合asc/desc订单的情况下

索引Top-N查询是性能之王,请确保使用它们

我有几个链接可以进一步阅读我所有的:

以甲骨文为中心

还没有涵盖Top-N查询,但这将在2011年出现