Sql 分页技术中可能存在的缺陷以及如何改进?

Sql 分页技术中可能存在的缺陷以及如何改进?,sql,database,pagination,Sql,Database,Pagination,我想为我的网页执行分页。下面用一个例子解释我正在使用的方法(我主要在互联网上找到) 假设我有下表user +----+------+----------+ | id | name | category | +----+------+----------+ | 1 | a | 1 | | 2 | b | 2 | | 3 | c | 2 | | 4 | d | 3 | | 5 | e | 1

我想为我的网页执行分页。下面用一个例子解释我正在使用的方法(我主要在互联网上找到)

假设我有下表
user

+----+------+----------+
| id | name | category |
+----+------+----------+
|  1 | a    |        1 |
|  2 | b    |        2 |
|  3 | c    |        2 |
|  4 | d    |        3 |
|  5 | e    |        1 |
|  6 | f    |        3 |
|  7 | g    |        1 |
|  8 | h    |        3 |
|  9 | i    |        2 |
| 10 | j    |        2 |
| 11 | k    |        1 |
| 12 | l    |        3 |
| 13 | m    |        3 |
| 14 | n    |        3 |
| 15 | o    |        1 |
| 16 | p    |        1 |                                                     
| 17 | q    |        2 |                                                        
| 18 | r    |        1 |                                                           
| 19 | s    |        3 |                                                         
| 20 | t    |        3 |                                                          
| 21 | u    |        3 |                                                             
| 22 | v    |        3 |                                                          
| 23 | w    |        1 |
| 24 | x    |        1 |
| 25 | y    |        2 |
| 26 | z    |        2 |
+----+------+----------+
我想显示关于类别
3
用户的信息,每页2个用户,我使用以下查询

从用户中选择*,其中类别=3限制0,2

+----+------+----------+
| id | name | category |
+----+------+----------+
|  4 | d    |        3 |
|  6 | f    |        3 |
+----+------+----------+
+----+------+----------+
| id | name | category |
+----+------+----------+
|  8 | h    |        3 |
| 12 | l    |        3 |
+----+------+----------+
接下来的两天呢

从用户中选择*,其中类别=3限制2,2

+----+------+----------+
| id | name | category |
+----+------+----------+
|  4 | d    |        3 |
|  6 | f    |        3 |
+----+------+----------+
+----+------+----------+
| id | name | category |
+----+------+----------+
|  8 | h    |        3 |
| 12 | l    |        3 |
+----+------+----------+
等等

现在在实践中,我在一个表中有大约7000个元组。那么,在速度方面,或者在这种方法可能具有的任何回退方面,有没有更好的方法来实现这一点呢


谢谢。

您不希望获取的值超过当前页面所能处理的值,因此,是的,您将基本上每页进行一次查询。其他一些解决方案(如)将执行基本相同的查询

现在,您可以在客户端构建一些逻辑来进行分页—一次预取多个(或全部)页面并将它们存储在客户端。这样,分页完全在客户端处理,无需进一步查询。但是,如果用户可能只查看页面的一小部分,这就有点浪费了


如果实际生产表中有更多列,则可以只选择相关列而不是*,或者可能添加某种排序依据(用于排序)

您可以使用。它的意思和你要找的完全一样。我成功地使用它分页超过一百万行,它非常快速且易于实现。

我希望这会有所帮助,您必须将页码替换为页码,并将每页记录替换为每页记录,在您的示例中为2:

select A.* from
(select @row := @row + 1 as Row_Number, User.* from User 
join (select @row := 0) Row_Temp_View
where category = 3
) A
where row_number 
between (your_page_number * records_per_page)-records_per_page+1
and your_page_number * records_per_page;

注意这将为您获取正确的记录,而您的样本不会,这是因为您的样本将始终为您获取两条记录,这并不总是正确的,假设您有3个用户,您将在两个页面中显示,因此您的示例将在第一个页面中显示第一个和第二个用户,并在第二个页面中显示第二个和第三个用户,这是不正确的,我的代码将在第一页中显示第一个和第二个,在第二页中只显示第三个……

为什么要投否决票?如果您认为答案与您需要的查询不相关,那么datatable也会在“服务器端处理”中处理这一问题,只查询一页中可以显示的那么多行。我猜测,如果只需一个链接和注释,它看起来更像是一个广告,而不是一个答案。请注意,如果有一个关于如何使用Datatables专门应用于用户问题的代码示例(使用提供的表),我将进行投票。。