萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql limit用法之limit分頁詳解

mysql limit用法之limit分頁詳解

在mysql中limit是計算從X到Y的偏移記錄,如我們數據庫中100條記錄,如果我想取前20條從就可以直接limit 0,20條就可以得到我們要的結果了,下面我來具體介紹linut用法。

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>

copyright © 萬盛學電腦網 all rights reserved