mysql的索引查詢內部使用的是quick range結構。先讓我們看看呼叫流程:
join->optimize()-->
make_join_plan()-->
estimate_rowcount()-->
get_quick_record_count()-->
test_quick_select()-->
...join_init_read_record()(這個函式設定要使用的讀取操作為rr_quick())-->
read_record(實際上是quick_range_select::get_next())-->
ha_innobase::multi_range_read_next-->
dsmrr_impl::dsmrr_next-->
handler::multi_range_read_next-->
如果是第一次:mrr_funcs.next(mrr_iter, &mrr_cur_range)實際上是呼叫:quick_range_seq_next
如果不是:read_range_next
quick_range_seq_next最重要的作用是設定範圍查詢的上下邊界:
uint quick_range_seq_next(range_seq_t rseq, key_multi_range *range)
上面函式中,設定上下邊界的的**:
start_key->key= cur->min_key; 為5
end_key->key= cur->max_key; 為7
start_key->flag=ha_read_key_or_next;
end_key->flag=ha_read_before_key;
執行完quick_range_seq_next,開始真正執行讀取操作:
read_range_first
/** @brief
read first row between two ranges.
store ranges for future calls to read_range_next.
@param start_key start key. is 0 if no min range
@param end_key end key. is 0 if no max range
@param eq_range_arg set to 1 if start_key == end_key
@param sorted set to 1 if result should be sorted per key
@note
record is read into table->record[0]
@retval
0 found row
@retval
ha_err_end_of_file no rows in range
@retval
\# error code
*/int handler::read_range_first(const key_range *start_key,
const key_range *end_key,
bool eq_range_arg,
bool sorted /* ignored */)
else
}
這裡會設定結束邊界:set_end_range(end_key, range_scan_asc); end_key為7。接下來讀取第一條記錄:
if (!start_key) // read first record
result= ha_index_first(table->record[0]);
else
result= ha_index_read_map(table->record[0],
start_key->key,
start_key->keypart_map,
start_key->flag);
if (compare_key(end_range) <= 0)
else
}
這個就是用來判斷讀取的記錄是不是到達了上界,如果是則返回ha_err_end_of_file結束。 MySQL核心技術之「WHERE條件」
先看一下呼叫鏈 join optimize make join select join tab set condition 這裡就把condition賦值給了join tab。那麼condition是如何產生的呢?是在parse乙個query的時候,具體的是yacc產生的 不用特意關心。舉例來說的,...
MySQL核心技術之「結果傳送」
本節我們主要討論count的結果處理與傳送。典型的sql語句為 select count from foo 結果累加呼叫鏈 join exec do select sub select evaluate join record end send group init sum functions re...
搜尋引擎核心技術
搜尋引擎的定義 搜尋引擎是傳統ir技術在web環境中的應用。一般來說,搜尋引擎是一種用於幫助使用者在internet上查詢資訊的搜尋工具,它以一定的策略在internet中搜尋,發現資訊,對資訊進行理解,提取,組織和處理,並為使用者提供檢索服務,從而起到資訊導航的目的。搜尋引擎的體系結構 searc...