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

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è)計
精品视频一区二区三区中文字幕| 国产亚洲一区激情小说| 中文字幕乱码人妻一区二| 伊人久久亚洲精品综合| 日韩精品一区高清视频| 亚洲美女高潮久久久久久久久| 国产片精品一区在线观看| 国内精品一区二区欧美| 亚洲欧美日韩校园春色| 日本一区二区三区高清在线| 日韩亚洲中文一区三级黄片| 亚洲av久久一区二区| 激情亚洲欧美日韩精品| 国产在线第一页第二页| 日本中文字幕激情在线| 激情图区亚洲一区二区| 日本中文字幕三级专区| 黄色录像日本黄色录像| 溪乱毛片一区二区三区| 一本久道久久综合狠狠老| 亚洲国产成在人网站天堂| 中文字幕乱码高清欧美日韩| 国产精品欧美色区福利在线| 蜜桃人妻av一区二区三区| 亚洲成人免费电影91| 99热精品免费在线观看| 久久精品人妻少妇一区二区| 天天躁日日躁夜夜躁夜夜| 女同伦理视频在线观看| 特别黄的日本免费视频| 亚洲人成网站在线免费看| 欧美国产日韩二区一区在线| 国产视频三级在线观看| 香蕉视频在线观看亚洲精品| 少妇高潮视频在线观看| 色呦呦一区二区三区视频| 青草免费在线播放视频| 日韩中文字幕综合不卡| 中文字幕中文字幕乱码| 亚洲丰满毛茸茸毛茸茸| 高潮国产精品一区二区|