欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

MySQL內(nèi)部臨時表策略的示例分析

這篇文章將為大家詳細(xì)講解有關(guān)MySQL內(nèi)部臨時表策略的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

為洛隆等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及洛隆網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站制作、洛隆網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

MySQL內(nèi)部臨時表策略
 
通過對MySQL數(shù)據(jù)庫的跟蹤和調(diào)試,以及參考MySQL官方文檔,對MySQL內(nèi)部臨時表使用策略進(jìn)行整理,以便于更加深入的理解。
使用內(nèi)部臨時表條件
     MySQL內(nèi)部臨時表的使用有一定的策略,從源碼中關(guān)于SQL查詢是否需要內(nèi)部臨時表??梢钥偨Y(jié)如下:
     1、DISTINCT查詢,但是簡單的DISTINCT查詢,比如對primary key、unique key等DISTINCT查詢時,查詢優(yōu)化器會將DISTINCT條件優(yōu)化,去除DISTINCT條件,也不會創(chuàng)建臨時表;
     2、不是第一個表的字段使用ORDER BY 或者GROUP BY; 
     3、ORDER BY和GROUP BY使用不同的順序;
     4、用戶需要緩存結(jié)果;  www.2cto.com  
     5、ROLLUP查詢。
 
     源碼如下所示
     代碼地址:sql_select.cc:854,函數(shù):JOIN::optimize(),位置:sql_select.cc:1399
  /*
    Check if we need to create a temporary table.
    This has to be done if all tables are not already read (const tables)
    and one of the following conditions holds:
    - We are using DISTINCT (simple distinct's are already optimized away)
    - We are using an ORDER BY or GROUP BY on fields not in the first table
    - We are using different ORDER BY and GROUP BY orders
    - The user wants us to buffer the result.
    When the WITH ROLLUP modifier is present, we cannot skip temporary table
    creation for the DISTINCT clause just because there are only const tables.
  */  www.2cto.com  
  need_tmp= (( const_tables != tables &&
               (( select_distinct || !simple_order || !simple_group) ||
                ( group_list && order ) ||
                test(select_options & OPTION_BUFFER_RESULT))) ||
             ( rollup.state != ROLLUP:: STATE_NONE && select_distinct ));
 
內(nèi)部臨時表使用原則
     但是使用了內(nèi)部臨時表,那么他是怎么存儲的呢?原則是這樣的:
     1、當(dāng)查詢結(jié)果較小的情況下,使用heap存儲引擎進(jìn)行存儲。也就是說在內(nèi)存中存儲查詢結(jié)果。
     2、當(dāng)查詢結(jié)果較大的情況下,使用myisam存儲引擎進(jìn)行存儲。
     3、當(dāng)查詢結(jié)果最初較小,但是不斷增大的情況下,將會有從heap存儲引擎轉(zhuǎn)化為myisam存儲引擎存儲查詢結(jié)果。
     
     什么情況算是查詢結(jié)果較小呢?從源碼中if的幾個參數(shù)可以看出:
     1、有blob字段的情況;
     2、使用唯一限制的情況;
     3、當(dāng)前表定義為大表的情況;
     4、查詢結(jié)果的選項為小結(jié)果集的情況;
     5、查詢結(jié)果的選項為強(qiáng)制使用myisam的情況。
       www.2cto.com  
     源碼如下所示
     代碼地址:sql_select.cc:10229,函數(shù):create_tmp_table(),位置:sql_select.cc:10557
  /* If result table is small; use a heap */
  /* future: storage engine selection can be made dynamic? */
  if ( blob_count || using_unique_constraint
      || ( thd->variables .big_tables && !( select_options & SELECT_SMALL_RESULT ))
      || ( select_options & TMP_TABLE_FORCE_MYISAM ))
  {
    share->db_plugin = ha_lock_engine(0, myisam_hton);
    table->file = get_new_handler( share, &table ->mem_root,
                                 share->db_type ());
    if (group &&
          ( param->group_parts > table-> file->max_key_parts () ||
           param->group_length > table-> file->max_key_length ()))
      using_unique_constraint=1;
  }
  else
  {
    share->db_plugin = ha_lock_engine(0, heap_hton);
    table->file = get_new_handler( share, &table ->mem_root,
                                 share->db_type ());
  }
  www.2cto.com  
     代碼地址:sql_select.cc:11224,函數(shù):create_myisam_from_heap(),位置:sql_select.cc:11287
 /*
    copy all old rows from heap table to MyISAM table
    This is the only code that uses record[1] to read/write but this
    is safe as this is a temporary MyISAM table without timestamp/autoincrement
    or partitioning.
  */
  while (! table->file ->rnd_next( new_table.record [1]))
  {
    write_err= new_table .file-> ha_write_row(new_table .record[1]);
    DBUG_EXECUTE_IF("raise_error" , write_err= HA_ERR_FOUND_DUPP_KEY ;);
    if (write_err )
      goto err ;
  }
官方文檔相關(guān)內(nèi)容
     以上內(nèi)容只是源碼表面的問題,通過查詢MySQL的官方文檔,得到了更為權(quán)威的官方信息。
     臨時表創(chuàng)建的條件:
     1、如果order by條件和group by的條件不一樣,或者order by或group by的不是join隊列中的第一個表的字段。
     2、DISTINCT聯(lián)合order by條件的查詢。
     3、如果使用了SQL_SMALL_RESULT選項,MySQL使用memory臨時表,否則,查詢詢結(jié)果需要存儲到磁盤。
     臨時表不使用內(nèi)存表的原則:
     1、表中有BLOB或TEXT類型。
     2、group by或distinct條件中的字段大于512個字節(jié)。
     3、如果使用了UNION或UNION ALL,任何查詢列表中的字段大于512個字節(jié)。
     此外,使用內(nèi)存表最大為tmp_table_size和max_heap_table_size的最小值。如果超過該值,轉(zhuǎn)化為myisam存儲引擎存儲到磁盤。

關(guān)于“MySQL內(nèi)部臨時表策略的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

文章名稱:MySQL內(nèi)部臨時表策略的示例分析
URL鏈接:http://aaarwkj.com/article42/pjcsec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、搜索引擎優(yōu)化、網(wǎng)站制作、網(wǎng)頁設(shè)計公司、全網(wǎng)營銷推廣、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計
深夜十八禁在线免费观看| 国产精品综合日韩精| 97国产一区二区精品久久呦| 在线观看亚洲毛片网站| 欧美亚洲精品一区在线观看| 四虎影视国产精品久久| 日韩夫妻性生活免费视频| 加勒比视频在线观看一区| 黄色三级亚洲男人的天堂| 一区二区三区日韩国产电影| 日韩精品诱惑一区二区| 日韩精品视频在线不卡播放| 亚洲熟妇丰满多毛的大昊| 久草福利在线观看免费| 国产三级网站在线观看| 日韩精品一区二区视频大全| 91精品人妻一区二区三区| 欧美日韩国产综合在线观看| 久久亚洲第一视频网站| 国产传媒在线视频免费| 成人在线午夜免费视频| 国产精品欧美一区二区视频 | 精品国产不卡在线观看| 在线一区二区三区高清视频| 亚洲精品一区二区三区三州| 91精品超碰人人在线公开| 91久久精品人妻一区二区| 日韩成人免费观看视频| 青青草原这里只有精品| 亚洲欧洲av男人的天堂| av中文字幕一二三区| 日本韩国三级视频在线观看| 成人av影视中文字幕| 日韩免费精品一区二区| 亚洲欧美日韩有码一区| 日韩欧美中文字幕区| 中文字幕精品一区二区三| 人妻少妇性色精品专区av| 日本女优中文字幕久久| 午夜神马福利激情视频| 深夜福利在线观看97|