Mysql 高效能索引
阿新 • • 發佈:2018-12-17
當資料量急劇增加時,查詢會變慢,這時候你可能需要索引。
建立的索引可以包含一個或多個列的值,如果索引包含多個列,那麼列的順序十分重要,因為mysql只能高效的使用最左字首列。建立一個包含兩個列的索引和兩個包含一個列的索引是大不相同的。 索引的型別: 1.B-Tree索引:
2.Hash索引: 假設你有一張表用來存放大量的url,如果使用B-Tree來儲存URL,儲存的內容會很大,因為本身url可能就很長。列入一下查詢:
mysql>select * from url_table where url = "http://www.mysql.com";
如果刪除原來的索引,而新增一個被索引的url_crc列,使用CRC32做雜湊,如下:
mysql>select * from url_table where url_crc = CRC32("http://www.mysql.com") and url="http://www.mysql.com";
如果想偷下懶可以在mysql中建立一個觸發器:
delimiter $ create trigger url_table_crc_ins before insert on url_table for each row begin set NEW.url_crc=crc32(NEW.url); end $ create trigger url_table_crc_upd before update on url_table for each row begin set NEW.url_crc = crc32(NEW.url); end $
使用hash索引的缺點: (1)hash 索引僅僅能滿足=,<=>,IN,IS NULL或者IS NOT NULL查詢,不能使用範圍查詢。 由於 hash 索引比較的是進行 hash 運算之後的 hash 值,所以它只能用於等值的過濾,不能用於基於範圍的過濾,因為經過相應的 hash 演算法處理之後的 hash 值的大小關係,並不能保證和hash運算前完全一樣。
(2)hash 索引無法被用來避免資料的排序操作。