zoukankan      html  css  js  c++  java
  • JOIN_TAB

    typedef struct st_join_table {
      st_join_table() {}                          /* Remove gcc warning */
      TABLE        *table;
      KEYUSE    *keyuse;            /**< pointer to first used key */
      SQL_SELECT    *select;
      /**
        When doing filesort, the select object is used for building the
        sort index. After the sort index is built, the pointer to the
        select object is set to NULL to avoid that it is used when reading
        the result records (@see create_sort_index()). For subqueries that
        do filesort and that are executed multiple times, the pointer to
        the select object must be restored before the next execution both
        to ensure that the select object is used and to be able to cleanup
        the select object after the final execution of the subquery. In
        order to be able to restore the pointer to the select object, it
        is saved in saved_select in create_sort_index() and restored in
        JOIN::exec() after the main select is done.
      */
      SQL_SELECT    *saved_select;
      COND        *select_cond;
      QUICK_SELECT_I *quick;
      Item           **on_expr_ref;   /**< pointer to the associated on expression   */
      COND_EQUAL    *cond_equal;    /**< multiple equalities for the on expression */
      st_join_table *first_inner;   /**< first inner table for including outerjoin */
      bool           found;         /**< true after all matches or null complement */
      bool           not_null_compl;/**< true before null complement is added      */
      st_join_table *last_inner;    /**< last table table for embedding outer join */
      st_join_table *first_upper;  /**< first inner table for embedding outer join */
      st_join_table *first_unmatched; /**< used for optimization purposes only     */
      
      /* Special content for EXPLAIN 'Extra' column or NULL if none */
      const char    *info;
      /* 
        Bitmap of TAB_INFO_* bits that encodes special line for EXPLAIN 'Extra'
        column, or 0 if there is no info.
      */
      uint          packed_info;
    
      READ_RECORD::Setup_func read_first_record;
      Next_select_func next_select;
      READ_RECORD    read_record;
      /* 
        Currently the following two fields are used only for a [NOT] IN subquery
        if it is executed by an alternative full table scan when the left operand of
        the subquery predicate is evaluated to NULL.
      */  
      READ_RECORD::Setup_func save_read_first_record;/* to save read_first_record */
      READ_RECORD::Read_func save_read_record;/* to save read_record.read_record */
      double    worst_seeks;
      key_map    const_keys;            /**< Keys with constant part */
      key_map    checked_keys;            /**< Keys checked in find_best */
      key_map    needed_reg;
      key_map       keys;                           /**< all keys with can be used */
    
      /* Either #rows in the table or 1 for const table.  */
      ha_rows    records;
      /*
        Number of records that will be scanned (yes scanned, not returned) by the
        best 'independent' access method, i.e. table scan or QUICK_*_SELECT)
      */
      ha_rows       found_records;
      /*
        Cost of accessing the table using "ALL" or range/index_merge access
        method (but not 'index' for some reason), i.e. this matches method which
        E(#records) is in found_records.
      */
      ha_rows       read_time;
      
      table_map    dependent,key_dependent;
      uint        use_quick,index;
      uint        status;                ///< Save status for cache
      uint        used_fields,used_fieldlength,used_blobs;
      enum join_type type;
      bool        cached_eq_ref_table,eq_ref_table,not_used_in_distinct;
      bool        sorted;
      /* 
        If it's not 0 the number stored this field indicates that the index
        scan has been chosen to access the table data and we expect to scan 
        this number of rows for the table.
      */ 
      ha_rows       limit; 
      TABLE_REF    ref;
      JOIN_CACHE    cache;
      JOIN        *join;
      /** Bitmap of nested joins this table is part of */
      nested_join_map embedding_map;
    
      void cleanup();
      /*
        In cases where filesort reads rows from a table using Loose Index
        Scan, the fact that LIS was used is lost because
        create_sort_index() deletes join_tab->select->quick. MySQL needs
        this information during JOIN::exec().
    
        This variable is a hack for MySQL 5.5 only. A value of true means
        that filesort used LIS to read from the table. In MySQL 5.6 and
        later, join_tab->filesort is a separate structure with it's own
        select that can be inquired to get the same information. There is
        no need for this variable in MySQL 5.6 and later.
      */
      bool        filesort_used_loose_index_scan;
      /*
        Similar hack as for filesort_used_loose_index_scan. Not needed for
        MySQL 5.6 and later.
      */
      bool        filesort_used_loose_index_scan_agg_distinct;
      inline bool is_using_loose_index_scan()
      {
        return (filesort_used_loose_index_scan || 
                (select && select->quick &&
                 (select->quick->get_type() ==
                  QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX))
                );
      }
      bool is_using_agg_loose_index_scan ()
      {
        return (filesort_used_loose_index_scan_agg_distinct ||
                (select && select->quick &&
                 (select->quick->get_type() ==
                  QUICK_SELECT_I::QS_TYPE_GROUP_MIN_MAX) &&
                 ((QUICK_GROUP_MIN_MAX_SELECT *)select->quick)->is_agg_distinct())
                );
      }
    } JOIN_TAB;
  • 相关阅读:
    2017级算法第二次上机-B.第k顺序统计量
    2017级算法第二次上机-B.女娲加农炮
    2017级算法第二次上机-A.ModricWang's Real QuickSort Query
    2017级算法第三次上机-G.ModricWang的导弹拦截系统
    2017级算法第三次上机-F. SkyLee炒股票
    2017级算法第三次上机-C.SkyLee组装电脑
    Objective-c快速入门
    [翻译] Android是怎样绘制视图的
    AnimationsDemo中的ZoomActivity代码分析
    getGlobalVisibleRect和getLocalVisibleRect
  • 原文地址:https://www.cnblogs.com/taek/p/5182952.html
Copyright © 2011-2022 走看看