适合大型级别的百级以上的数据分页:

如果少于10W的用 sql_2/sql_3即可

表1:

create table `t1`(

`id` int(11) not null auto_increment,

`title` char(200) not null,

`content` text not null,

flag tinyint(1) default '0'

);

sql_1:(慢)

sql_1 = "select id,title from t1 limit 开始行数,每页的纪录数";

查询慢,因为没有用到索引(改进用sql_2):

sql_2:(多慢/少快)

sql_2 = "select id,title from t1 order by id desc 开始行数,每页的纪录数";

查询不理想,用到了索引,但是如果数据大时,也会变慢,(改进用):

如果加上where,如:

sql_3:(多慢/少快)

sql_3 = "select id,title from t1 where flag = 1 order by id desc 开始行数,每页的纪录数";

此时加上 where 时,失去了索引的意义了,修改如下:

先修改数表,增加索引:(给where 的字段也加上索引,并放在索引的开始字段位置,即就是把 limit的字段放最后)

create table `t1`(

`id` int(11) not null auto_increment,

`title` char(200) not null,

`content` text not null,

`flag` tinyint(1) default '0',

primary key(`id`),

key `idx_key`(`flag`,`id`), /* 此时为增加的索引 */

);

sql_4 = "select id,title from t1 where flag = 1 order by flag,id limit 开始行数,每页的纪录数";

同时可以考虑分页的情况:(基本思路如下:)

先创建一个主表,只有 id,title,flag,

再创建一个详细表,如 id,content,

从主表先搜索出,再从详细表中获取相关的具体内容

 

原文转载于推酷网:http://www.tuicool.com/articles/Vri6rq