如何建立索引
· 索引通常被用於提高where條件的資料行匹配或者執行聯結操作時匹配其它表的資料行的搜尋速度。所以我們選擇索引的列也通常選擇出現在where子句、join子句、order by或group by子句中的列。
· 選擇索引時,需要考慮資料列的基數。所謂基數,是指資料列所包含的不同的資料的個數。如果基數相對於資料表行數較高的話,索引的效果比較好。換句話說,就是指資料列的不同的值越多,索引效果越好。如果乙個資料列只包含:0或者1兩個值的話,索引的用處就不大。如果值出現的機率幾乎相等,那麼無論搜尋哪個值都可能得到一半的資料行。在這些情況下,最好根本不要使用索引。
· 索引值較短的值,所選擇的資料型別也盡可能的要小一些。譬如:如果text能滿足需求的話,我們就不需要用mediutext。
· 如果建立聯合索引的話,譬如對:t1,t2,t3建立聯合索引的話,同時也是對t1和t1,t2建立了索引。但是如果單獨指定t2、t3、t1t3、t2t3的值的話,都會用不到索引。
sql語句中如何避免沒有使用索引的情況
首先先了解一下mysql優化器的工作原理:mysql查詢優化器最主要的目標是盡可能地使用索引,並且使用最嚴格的索引來消除盡可能多的資料行。所以當我們提交查詢語句時,如果優化器排除不符合條件的資料的速度越快,那麼查詢的結果也會越快。
·盡量比較資料型別相同的資料列。例如,int與bigint是不同的。char(10)被認為是char(10)或varchar(10),但是與char(12)或varchar(12)不同。
·盡量不要在where子句中對索引列使用表示式或者函式。如果你在索引列使用函式呼叫或者更複雜的算術表示式,mysql就不會使用索引,因為它必須計算出每個資料行的表示式值。
where mycol < 4 / 2 使用索引
where mycol * 2 < 4 沒有使用索引
· 在使用like時,盡量不要在開頭使用萬用字元。
where col_name like 』%string%』
where col_name like 』abc%』
· 不要使用型別轉換。如果某個索引列是int型,而在查詢時,賦值為字元型,將使用不了索引。
select * from mytbl where num_col = 1;使用索引
select * from mytbl where num_col = 『1』;沒有使用索引
·在select語句中可以使用straight_join關鍵字來過載優化器的選擇。
select straight_join ... from t1, t2, t3 ... ;
select ... from t1 straight_join t2 straight_join t3 ... ;
mysql 索引方法 MySQL索引方法
mysql目前主要有以下幾種索引方法 b tree,hash,r tree。一 b tree b tree是最常見的索引型別,所有值 被索引的列 都是排過序的,每個葉節點到跟節點距離相等。所以b tree適合用來查詢某一範圍內的資料,而且可以直接支援資料排序 order by b tree在myis...
mysql 索引的使用
一 什麼是索引!學乙個技術的時候,首先要知道他是什麼,他的作用是什麼,他能幹什麼 索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就...
mysql索引的使用
索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可以有多個單列索引,但這不是組合索引。組合索引,即乙個索包含多個列。1 普通索引 這是最基本的索引,它沒有任何限制。它有以下幾種建立方式 建立索引 create index indexname on tablename column ...