好的,比如说,有一张有百万条记录的表。然后我们不知何故需要一个查询
Select column1 from tbl where column1 like '%a%';
假设这个查询的结果将在一个程序中用于检查一些信息,而这个程序需要所有的结果数据来检查-->所以我们不能零碎地取数据。
如果我们零碎地获取数据,那么我们必须使用 LIMIT。
但是如果我们运行该查询,那么它会下载大量数据并使系统变慢。
问题:还有其他优雅的解决方案吗?
好的,比如说,有一张有百万条记录的表。然后我们不知何故需要一个查询
Select column1 from tbl where column1 like '%a%';
假设这个查询的结果将在一个程序中用于检查一些信息,而这个程序需要所有的结果数据来检查-->所以我们不能零碎地取数据。
如果我们零碎地获取数据,那么我们必须使用 LIMIT。
但是如果我们运行该查询,那么它会下载大量数据并使系统变慢。
问题:还有其他优雅的解决方案吗?
他的程序需要所有结果数据进行检查
如果一个程序需要所有这些数据来检查它需要检查的任何内容,那么就没有办法解决它:您需要从 RDBMS 下载所有数据。
但是,通常您不需要将所有数据存储在内存中:如果可以通过一次检查一行来检查数据,则可以一次读取一行数据,检查它,然后丢弃该行。这种方法提供了一个很好的分页替代方案,因为您只需要发送一个查询,非分页查询通常比分页查询更易于使用。
当您的查询像上面显示的那样简单时,您可以做很多事情来使其更快。如果您有大量数据,您将不得不预计它需要更长的时间。只需使用LIMIT
并检查查询 10000 条记录需要多长时间,然后慢慢增加并测试性能
哦,抱歉刚刚意识到您说您需要所有数据。也许尝试将查询拆分一下,例如仅搜索尽可能少的内容,然后在您需要使用或显示数据时运行使用初始结果的查询作为搜索参数?
我只能假设您在这里展示的只是一个示例,还是您正在运行的实际查询?
根据您要对数据执行的操作,您可以要求数据库执行(部分)它。数据库通常可以执行很多操作,例如加法、减法、取最大值或最小值、求平均值等。
但是,在不知道确切的处理类型的情况下,很难说出您的确切替代方案是什么。