mysql 搜尋引擎 索引 MySQL 索引詳解

2021-10-17 17:59:59 字數 1061 閱讀 8111

查詢和索引的優化

只有當資料庫裡已經有了足夠多的測試資料時,它的效能測試結果才有實際參考價值。如果在測試資料庫裡只有幾百條資料記錄,它們往往在執行完第一條查詢命令之後就被全部載入到記憶體裡,這將使後續的查詢命令都執行得非常快–不管有沒有使用索引。只有當資料庫裡的記錄超過了1000條、資料總量也超過了 mysql伺服器上的記憶體總量時,資料庫的效能測試結果才有意義。

在不確定應該在哪些資料列上建立索引的時候,人們從explain select命令那裡往往可以獲得一些幫助。這其實只是簡單地給一條普通的select命令加乙個explain關鍵字作為字首而已。有了這個關鍵字,mysql將不是去執行那條select命令,而是去對它進行分析。mysql將以**的形式把查詢的執行過程和用到的索引(如果有的話)等資訊列出來。

在explain命令的輸出結果裡,第1列是從資料庫讀取的資料表的名字,它們按被讀取的先後順序排列。type列指定了本資料表與其它資料表之間的關聯關係(join)。在各種型別的關聯關係當中,效率最高的是system,然後依次是const、eq_ref、ref、range、index和 all(all的意思是:對應於上一級資料表裡的每一條記錄,這個資料表裡的所有記錄都必須被讀取一遍–這種情況往往可以用一索引來避免)。

possible_keys資料列給出了mysql在搜尋資料記錄時可選用的各個索引。key資料列是mysql實際選用的索引,這個索引按位元組計算的長度在key_len資料列裡給出。比如說,對於乙個integer資料列的索引,這個位元組長度將是4。如果用到了復合索引,在key_len資料列裡還可以看到mysql具體使用了它的哪些部分。作為一般規律,key_len資料列裡的值越小越好(意思是更快)。

ref資料列給出了關聯關係中另乙個資料表裡的資料列的名字。row資料列是mysql在執行這個查詢時預計會從這個資料表裡讀出的資料行的個數。row資料列裡的所有數字的乘積可以讓我們大致了解這個查詢需要處理多少組合。

最後,extra資料列提供了與join操作有關的更多資訊,比如說,如果mysql在執行這個查詢時必須建立乙個臨時資料表,就會在extra列看到using temporary字樣。

本文摘自《mysql 5權威指南》(3rd)的8.9節。(2007.07.05最後更新)

MySQL搜尋引擎程式 mysql搜尋引擎

mysql是我們比較常用的一種資料庫軟體。它有著諸多的優點,如開源的,免費的等等。其實它還有乙個很好的特點,那就是有多種引擎可以供你選擇。如果賽車手能根據不同的路況,地形隨手更換與之最適宜的引擎,那麼他們將創造奇蹟。然而目前他們還做不到那樣便捷的更換引擎,但是我們卻可以 所謂知己知彼方可百戰不殆,要...

MYSQL搜尋引擎

mysql數 據庫引擎取決於mysql在安裝的時候是如何被編譯的。要新增乙個新的引擎,就必須重新編譯mysql。在預設情況下,mysql支援三個引擎 isam myisam和heap。另外兩種型別innodb和berkley bdb 也常常可以使用。如果技術高超,還可以使用mysql api自己做乙...

搜尋引擎 索引

正排索引 文件編號,單詞編號,單詞的數量,單詞出現的位置。倒排索引 1,單詞詞典,儲存單詞以及統計資訊,單詞在記錄表中的便宜,可常駐記憶體,用雜湊表儲存。2,記錄表,單詞對應的文件集合,記錄單詞出現的數目 位置。文件採用差分變長編碼。其中文件可按編號公升序排列 可利用差分編碼 也可按出現次數排列,可...