mysql limit用法之limit分页详解
mysql limit语法
代码如下 |
复制代码 |
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
|
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
代码如下 |
复制代码 |
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行
//换句话说,LIMIT n 等价于 LIMIT 0,n。
|
上面的做法在数据量小的时间还是很快的,但是各万张数据就不行了,我们可以对limit进行如下优化
我现在测试100W数据结果如下
代码如下 |
复制代码 |
Select * From yanxue8_visit Where vid >=( Select vid From yanxue8_visit Order By vid limit 10,1 ) limit 10
次运行,时间保持在0.0005-0.0006之间,主要是0.0006
select * from yanxue8_visit limit 10000,10 多次运行,时间保持在0.0187左右
Select * From yanxue8_visit Where vid >=( Select vid From yanxue8_visit Order By vid limit 10000,1 ) limit 10
|
多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。
结合与php分页实例
代码如下 |
复制代码 |
<html>
<head>
<title>
ShowData
</title>
</head>
<body>
<h2>ShowData</h2>
<?php
//连接数据库
$page = 1;
$db = mysql_connect('127.0.0.1','root','toor');
mysql_select_db('test',$db);
$pagesize = 3; //每页显示到数量
//计算一共有多少记录,用于计算页数
$rs = mysql_query("select count(*) from info",$db);
$row = @mysql_fetch_array($rs);
$numrows = $row[0];
//计算页数
$pages = intval($numrows / $pagesize);
if ($numrows % $pagesize)
{
$pages++;
}
//设置页数
if (isset($_GET['page']))
{
$page = intval($_GET['page']);
}
else
{
$page = 1; //其他情况,都指向第一页
}
//计算记录的偏移量
$offset = $pagesize * ($page - 1);
//读取指定记录
$rs = mysql_query("select * from info order by id limit $offset,$pagesize",$db);
//把数据用表格显示出来
if ($row = @mysql_fetch_array($rs))
{
$i = 0;
?>
<table border='0' width='80%'>
<tr>
<td width='50%'>
<p align='center'>ID</td>
<td width='50%'>
<p align='center'>DOC</td>
</tr>
<?php
do{
$i++;
?>
<tr align='center'>
<td width='50%'><?=$row['id']?></td>
<td width='50%'><?=$row['doc']?></td>
</tr>
<?php
}
//循环显示数据
while ($row = mysql_fetch_array($rs));
echo "</table>";
}
echo "<div align='center'> 共".$pages."页(".$page."/".$pages.")";
for ($i = 1;$i < $page;$i++)
{
echo "<a href='showdata.php?page=".$i."'>[".$i."]</a>";
}
echo "[".$page."]";
for ($i = $page + 1;$i <= $pages;$i++)
{
echo "<a href='showdata.php?page=".$i."'>[".$i."]</a>";
}
echo "</div>";
?>
</body>
</html>
|
补充:数据库,mysql教程