<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      川山甲

      追求內心的非常平靜!瞬間清空所有的雜念,達到物我兩忘!

        博客園  :: 首頁  ::  :: 聯系 :: 訂閱 訂閱  :: 管理
       
       
        程序員代碼的編寫能力主要體現在思維的嚴謹上。有些看起來很簡單的東西,里面包含很多很細的點,你能想到嗎?
        今天我就簡單說一下一個例子,讓大家學習到新知識的同時,也養成一種思維的習慣。
       
       
      問題
       
        有一張收藏表,里面存儲的是用戶和圖書ID。數據量為1億。現在要求分頁獲取所有用戶ID(不重復),寫下你的sql語句。
       
        表結構大致如下:
        
      CREATE TABLE 收藏表(
           `id` bigint(20) unsigned NOT NULL auto_increment COMMENT 'primary key',
           `uid` bigint(20) unsigned NOT NULL default 0 COMMENT 'uid',
         `status` tinyint(3) unsigned NOT NULL default 0 COMMENT 'status', `book_id` bigint(20) unsigned NOT NULL default 0 COMMENT 'book Id', `create_time` int(11) unsigned not null default 0 COMMENT 'create time', PRIMARY KEY (`id`), UNIQUE KEY `uid_book_id` (`uid`, `book_id`),
          KEY `uid_status` (`uid`, `status`) )ENGINED=Innodb Auto_increment=1 default charset=gbk COMMENT '用戶收藏信息';

       

      三種設計
       

        最容易想到的第一種分頁語句是(這也是我們最容易想到的語句):

          select distinct uid from 收藏表 order by uid desc limit 0, 10;
          select distinct uid from 收藏表 order by uid desc limit 11, 10;
      

        再高級點語句,第二種($last_min_uid表示上一次讀到的最后一個uid):

          select distinct uid from 收藏表 order by uid desc limit 10;
          select distinct uid from 收藏表 where uid < $last_min_uid order by uid desc limit 10;
      

        最高級的方式

          select uid from 收藏表 group by uid order by uid desc limit 10;
          select uid from 收藏表 group by uid having uid < $last_min_uid order by uid desc limit 10;
      

        

        

      分析
       

        以上三種方式都可以實現分頁獲取到用戶ID列表,那么區別是什么?我現在就把每一種跟大家分析下。

       

        第一種在業務場景中,會出現丟數據的情況。——這是比較嚴重的情況,不予采納。

        具體的業務場景是這樣的:當你讀取第5頁的時候,前四頁的用戶id列表中,假如有一頁的用戶ID從庫中刪除掉,那么你這時讀到的第5頁(limit 51, 10),就是原來的第6頁,你會把1頁的用戶ID丟失掉。

       

        第二種的第二條語句,通過explain分析,實際并沒有命中唯一索引,而只是命中了一般索引,數據查詢范圍在7百萬級別,故explain建議我們使用group by。——這個查詢會有嚴重的性能問題

      +----+--------------+---------------+-------+-------------------------------------------------------------+-------------+----------+-------+------------+------------------------------------------------------------------------+
      | id   | select_type | table           | type  | possible_keys                                                      | key           | key_len | ref     | rows        | Extra                                                                               |
      +----+--------------+---------------+-------+-------------------------------------------------------------+---------------------+---------+------+---------+---------------------------------------------------------------------+
      | 1    | SIMPLE      | ubook_room | range | uid_book_id                                                       | uid_status  | 4          | NULL | 7066423  | Using where; Using index for group-by; Using temporary; Using filesort |
      +----+--------------+---------------+-------+-------------------------------------------------------------+-------------+----------+-------+------------+------------------------------------------------------------------------+

        

        第三種explain分析,數據查詢范圍在12萬級別(跟第二種相差一個數量級),查詢性能高

      +----+---------------+------------+-------+-----------------+-----------------+---------+----------+----------+-------------+
      | id   | select_type  | table       | type  | possible_keys  | key               | key_len | ref       | rows      | Extra         |
      +----+---------------+------------+-------+-----------------+-----------------+---------+----------+----------+-------------+
      | 1    | SIMPLE       | 收藏表      | index | NULL             | uid_book_id   | 12         | NULL  | 121719   | Using index |
      +----+---------------+------------+-------+-----------------+-----------------+---------+----------+----------+-------------+

       

       

        

      推薦
       

        

       

       

       

      posted on 2015-07-06 20:18  川山甲  閱讀(11299)  評論(7)    收藏  舉報
      主站蜘蛛池模板: 护士的小嫩嫩好紧好爽| 在线a亚洲老鸭窝天堂| 色综合天天综合网中文伊| 国产综合视频一区二区三区| 国产男女猛烈无遮挡免费视频网址 | 亚洲国产午夜精品理论片| 亚洲中文久久久精品无码| 国产无遮挡又黄又大又爽| 欧美老熟妇乱子伦牲交视频| 日韩中文字幕人妻一区| 国产精品高清一区二区三区| 欧美极品色午夜在线视频| 人人妻人人插视频| 柠檬福利第一导航在线| 久久午夜色播影院| 兰考县| 国产精品免费中文字幕| 中文字幕精品人妻av在线| 欧美牲交a欧美牲交aⅴ免费真| 亚洲暴爽av天天爽日日碰| 韩国精品一区二区三区| 亚洲高清偷拍一区二区三区| 亚洲国产精品国自拍av| 欧美日激情日韩精品嗯| 免费观看激色视频网站| 少妇厨房愉情理9仑片视频| 中文字幕有码高清日韩| 国产精品无遮挡猛进猛出| 国产女同疯狂作爱系列 | 日本在线视频网站www色下载 | 国产精品一区二区中文| 亚洲欧美日韩国产精品一区二区| 精品国产中文字幕av| 免费国产好深啊好涨好硬视频 | 中国大陆高清aⅴ毛片| 久久综合国产一区二区三区| 中文字幕亚洲人妻一区| 国产成人AV大片大片在线播放| 久久精品国产91精品亚洲| 中年国产丰满熟女乱子正在播放 | 中文字幕一区二区三区精彩视频|