/** InnoDB b-tree Index */typedef struct DICT_INDEX_STRUCT dict_index_t;
/** Data structure for an index. Most fields would beinitialized to 0, NULL or FALSE in Dict_mem_index_create (). */structdict_index_struct{index_id_t ID; /*!< ID of the index*/mem_heap_t* HEAP;/*!< Memory Heap*/ Const Char* NAME;/*!< Index name*/ Const Char* TABLE_NAME;/*!< Table name*/dict_table_t* TABLE;/*!< back pointer to table*/ //See#ifndef univ_hotbackup unsigned space: +; /*!< space where the index tree is placed*/unsigned page: +;/*!< Index Tree root page number*/#endif/* ! Univ_hotbackup * *unsigned type:dict_it_bits; /*!< Index Type (dict_clustered, Dict_unique, Dict_universal, Dict_ibuf, Dict_corrupt)*/#defineMax_key_length_bits 12unsigned trx_id_offset:max_key_length_bits; /*!< position of the Trx ID column in a clustered index record, if the fields before it is known to BES of a fixed size, 0 otherwise*/#if(1<<max_key_length_bits) < Max_key_length# error (1<<max_key_length_bits) <Max_key_length#endifunsigned n_user_defined_cols:Ten; /*!< number of columns the user defined to being in the index:in the internal representat Ion we add more columns*/unsigned n_uniq:Ten;/*!< number of fields from the beginning which is enough to determine an index entry U Niquely*/unsigned n_def:Ten;/*!< number of fields defined so far*/unsigned n_fields:Ten;/*!< Number of fields in the index*/unsigned n_nullable:Ten;/*!< Number of nullable fields*/unsigned cached:1;/*!< TRUE If the Index object is in the dictionary cache*/unsigned to_be_dropped:1; /*!< TRUE If this index was marked to being dropped in Ha_innobase::p repare_drop_index (), O Therwise FALSE. Protected by Dict_sys->mutex, Dict_operation_lock and Index->lock.*/dict_field_t* Fields;/*!< array of field descriptions*/#ifndef univ_hotbackup ut_list_node_t (dict_index_t) indexes;/*!< List of indexes of the table*/btr_search_t* SEARCH_INFO;/*!< info used in optimistic searches*/ /*----------------------*/ /** Statistics for query optimization*/ /* @{ */ib_int64_t*stat_n_diff_key_vals; /*!< Approximate number of different key values for the index, for each n-column Prefi x where n <= dict_get_n_unique (index); We periodically calculate new estimates*/ib_int64_t*stat_n_non_null_key_vals; /*approximate number of Non-null key values for the index, for each column where n < Dict_get_n_unique (index); This was used when Innodb_stats_method was "nulls_ignored". */Ulint stat_index_size; /*!< Approximate index size in database pages*/Ulint stat_n_leaf_pages; /*!< Approximate number of leaf pages in the index tree*/ /* @} */rw_lock_tLock;/*!< read-write Lock protecting the upper levels of the index tree*/trx_id_t trx_id;/*!< ID of the transaction that created this index, or 0 if the index existed when Inno DB was started up*/#endif/* ! Univ_hotbackup * *#ifdef univ_blob_debug mutex_t Blobs_mutex; /*!< Mutex protecting BLOBs*/ void* BLOBS;/*!< Map of (page_no,heap_no,field_no) to first_blob_page_no; protected by Blobs_mutex; @see btr_blob_dbg_t*/#endif/* Univ_blob_debug */#ifdef univ_debug ulint magic_n;/*!< Magic number*//** Value of Dict_index_struct::magic_n*/# define Dict_index_magic_n76789786#endif};
Structural body dict_index_t;