create   procedure   `mysqltestuser_select_pageable`(
        _whereclause   varchar(2000),     --   查找条件
        _orderby   varchar(2000),     --   排序条件
        _pagesize     int   ,       --   每页记录数
        _pageindex   int   ,     --   当前页码
        _docount       bit       --   标志:统计数据/输出数据
)
        not   deterministic
        sql   security   definer
        comment   ' '
begin
  --   定义key字段临时表
  drop   table   if   exists   _temptable_keyid;     --   删除临时表,如果存在
  create   temporary     table     _temptable_keyid
  (
userid   int
  )type=heap;--   构建动态的sql,输出关键字key的id集合
  --   查找条件     set   @sql   =   'select     userid   from   mysqltestuser ';
      if   (_whereclause   is   not   null)     and   (_whereclause   <>   ' ')   then
      set   @sql=   concat(@sql,   '   where   '   ,_whereclause);
      end   if;      if   (_orderby   is   not   null)     and     (_orderby   <> ' ')   then
      set   @sql=   concat(   @sql   ,   '   order   by   '   ,   _orderby);
      end   if;
--   准备id记录插入到临时表 set   @sql=concat( 'insert   into   _temptable_keyid(userid) ',   @sql);
  prepare   stmt   from   @sql;
  execute   stmt   ;
  deallocate   prepare   stmt; --   key的id集合     [end]--   下面是输出    if   (_docount=1)   then     --   统计
              begin
                        select   count(*)   as   recordcount   from   _temptable_keyid;
              end;
    else                                   --   输出记录集
              begin
                      --   计算记录的起点位置
      set   @startpoint   =   ifnull((_pageindex-1)*_pagesize,0);
                      set   @sql= '                 select           a.*
          from       mysqltestuser   a
          inner   join   _temptable_keyid   b       //这里使用inner join 来查询,意义在哪,提升效率了?怎样提升的?
          on     a.userid   =b.userid     ';      set   @sql=concat(@sql, "     limit     ",@startpoint, "   , ",_pagesize);
                      prepare   stmt   from   @sql;
      execute   stmt   ;
      deallocate   prepare   stmt;
              end;
    end   if;      drop   table   _temptable_keyid;
    end;
下面是mysqltestuser表的ddl:create   table   `mysqltestuser`   (
    `userid`   int(11)   not   null   auto_increment,
    `name`   varchar(50)   default   null,
    `chinesename`   varchar(50)   default   null,
    `registerdatetime`   datetime   default   null,
    `jf`   decimal(20,2)   default   null,
    `description`   longtext,
    primary   key     (`userid`)
)   engine=innodb   default   charset=gb2312;