mysql分页数据变化_关于MySQL数据量增加变化不大时,一种分页的优化方案

关于分页的优化。

我们知道,在MySQL中分页很简单,直接LIMIT page_no,page_total 就可以了。

可是当记录数慢慢增大时,她就不那么好使了。

这里我们创建摘要表来记录页码和原表之间的关联。

下面为测试数据。

原表:

CREATE TABLE `t_group` (

`id` int(11) NOT NULL auto_increment,

`money` decimal(10,2) NOT NULL,

`user_name` varchar(20) NOT NULL,

`create_time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,

PRIMARY KEY  (`id`),

KEY `idx_combination1` (`user_name`,`money`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

原表总记录数:

mysql> select count(*) from t_group;

+----------+

| count(*) |

+----------+

| 10485760 |

+----------+

1 row in set (0.00 sec)

分页表:

CREATE TABLE `t_group_ids` (

`id` int(11) NOT NULL,

`group_id` int(11) NOT NULL,

PRIMARY KEY  (`id`,`group_id`),

KEY `idx_id` (`id`),

KEY `idx_group_id` (`group_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入分页表数据。当然这里如果你的表主键不是ID,那你得自己想办法搞这个分页表的数据了。这个好实现,就不说了。

mysql> insert into t_group_ids select ceil(id/20),id from t_group;

Query OK, 10485760 rows affected (2 min 56.19 sec)

Records: 10485760  Duplicates: 0  Warnings: 0

现在来看看对比数据。

用普通LIMIT来实现分页。

mysql> select * from t_group where 1 limit 20;

+----+--------+-----------+---------------------+

| id | money  | user_name | create_time         |

+----+--------+-----------+---------------------+

|  1 |  50.23 | david     | 2008-10-23 12:55:49 |

|  2 |  55.23 | livia     | 2008-10-23 10:02:09 |

|  3 | 100.83 | leo       | 2008-10-23 10:02:22 |

|  4 |  99.99 | lucy      | 2008-10-23 10:02:39 |

|  5 | 299.99 | simon     | 2008-10-23 10:02:52 |

|  6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值