mysql索引相關

2022-05-15 10:12:21 字數 1220 閱讀 3838

explain 可以檢視sql語句的執**況,可以看到每個條件掃瞄的行數,當系統內需要使用sql查詢時,通過explain看下該語句的效能。

1.索引通常被用於提高where條件的資料行匹配或者執行聯結操作時匹配其它表的資料行的搜尋速度。所以我們選擇索引的列也通常選擇出現在where子句、join子句、order by或group by子句中的列。

2.資料列的不同的值越多,索引效果越好。如果乙個資料列只包含:0或者1兩個值的話,索引的用處就不大。

3.如果索引了多列,要遵守最左字首法則。所謂最左前列,指的是查詢從索引的最左前列開始,並且不跳過索引中的列。譬如對:t1,t2,t3建立聯合索引的話,同時也是對t1和t1,t2建立了索引。但是如果單獨指定t2、t3、t1t3、t2t3的值的話,都會用不到索引。

4.盡量比較資料型別相同的資料列。例如,int與bigint是不同的。char(10)被認為是char(10)或varchar(10),但是與char(12)或varchar(12)不同。

5.索引列不應該作為表示式的一部分,即也不能在索引列上使用函式。

6.在使用like時,盡量不要在開頭使用萬用字元

where col_name like 』%string%』

where col_name like 』abc%』

7.不要使用型別轉換。如果某個索引列是int型,而在查詢時,賦值為字元型,將使用不了索引。

select * from mytbl where num_col = 1;使用索引

select * from mytbl where num_col = 『1』;沒有使用索引

8.在select語句中可以使用straight_join關鍵字來過載優化器的選擇。left join時會選擇結果集較小的表作為基準表,如果排序條件為另一張表的字段就有可能影響效率,straight_join可以指定順序連線。

9.當mysql一旦估計檢查的行數可能會」太多」,範圍查詢優化將不會被使用。

10.盡量借用覆蓋索引,減少select * from …語句使用;

11.order by子句,盡量使用index方式排序,避免使用filesort方式排序;

12.慎用left join語句,避免建立臨時表使用left join語句的時候,避免出現建立臨時表。盡量不要用left join,分而治之。非要使用的時候,要詢問自己是不是真要必須要使用。

MySQL索引相關

1 什麼是最左字首原則?以下回答全部是基於mysql的innodb引擎 例如對於下面這一張表 如果我們按照 name 欄位來建立索引的話,採用b 樹的結構,大概的索引結構如下 如果我們要進行模糊查詢,查詢name 以 張 開頭的所有人的id,即 sql 語句為 select id from tabl...

MySQL 索引相關操作

在資料庫操作中,經常需要查詢特定的資料,以一條 select from zyftest where id 10000 為例,資料庫必須從第一條記錄來時遍歷,直到找到id為10000的資料,這樣的效率顯然非常低。所以,mysql允許建立索引來加快資料表的查詢和排序。一 索引的概念分析 索引的目的在於提...

mysql表索引 MySQL表及索引相關知識

1.表 1.1 建表 create table student id int 4 not null,name char 20 not null,age tinyint 2 not null default 0 dept varchar 16 default null show create tabl...