mysql PHP面試題 索引總結

2021-09-24 21:03:59 字數 3326 閱讀 5736

主鍵索引:資料列不允許重複,不允許為null.乙個表只能有乙個主鍵。

唯一索引:資料列不允許重複,允許為null值,乙個表允許多個列建立唯一索引。

普通索引:基本的索引型別,沒有唯一性的限制,允許為null值。

全文索引:是目前搜尋引擎使用的一種關鍵技術。

alter table table_name add unique (column);  // 建立唯一索引

alter table table_name add unique (column1,column2); // 建立唯一組合索引

alter table table_name add index index_name (column); // 建立普通索引

alter table table_name add index index_name(column1, column2, column3);// 建立組合索引

alter table table_name add fulltext (column); //建立全文索引

在建立多列索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊。

create table test ( id int(11),a int(11), b  int(11) ,c int(11));

alter table test_key add index a_b_c (a,b,c);

explain select * from test where a = 1 and b = 1 and c = 1; //a,b,c(使用索引)

explain select * from test where c = 1 and b = 1 and a = 1; //c,b,a(使用索引)

explain select * from test where c = 1 and a = 1 and b = 1; //c,a,b(使用索引)

explain select * from test where a = 1 and b = 1; //a,b(使用索引)

explain select * from test where a = 1 and c = 1; //a,c (使用索引)

explain select * from test where c = 1 and a = 1; //c,a (使用索引)

explain select * from test where c = 1; //c (沒有使用索引)

explain select * from test where b = 1; //b (沒有使用索引)

explain select * from test where b =1and c = 1; //b,c(未使用索引)

explain select * from test where c = 1 and b = 1; //c,b(未使用索引)

btree是最常用的mysql資料庫索引演算法,也是mysql預設的演算法。因為它不僅可以被用在=,>,>=,

select * from test where name like 'cap%'; 

以萬用字元開頭,或者沒有使用常量,則不會使用索引,例如:

select * from test where name like '%cap';

對於查詢語句,最重要的優化方式就是使用索引。 而執行計畫,就是顯示資料庫引擎對於sql語句的執行的詳細情況,其中包含了是否使用索引,使用什麼索引,使用的索引的相關資訊等。

執行計畫包含的資訊 id 有一組數字組成。表示乙個查詢中各個子查詢的執行順序;

idselect_type

description

1******

不包含任何子查詢或union等查詢

2primary

包含子查詢最外層查詢就顯示為 primary

3subquery

在select或 where字句中包含的查詢

4derived

from字句中包含的查詢

5union

出現在union後的查詢語句中

6union result

從union中獲取結果集,例如上文的第三個例子

table查詢的資料表,當從衍生表中查資料時會顯示 x 表示對應的執行計畫id partitions 表分割槽、表建立的時候可以指定通過那個列進行表分割槽。

一般來說至少要達到 range ,要求一般是ref ,最好能達到 consts

index 全掃瞄,速度非常慢

type

description

all掃瞄全表資料

index

遍歷索引

range

索引範圍查詢

index_subquery

在子查詢中使用 ref

unique_subquery

在子查詢中使用 eq_ref

ref_or_null

對null進行索引的優化的 ref

fulltext

使用全文索引

ref使用非唯一索引查詢資料

eq_ref

在join查詢中使用primary keyorunique not null索引關聯。

possible_keys可能使用的索引,注意不一定會使用。查詢涉及到的字段上若存在索引,則該索引將被列出來。當該列為 null時就要考慮當前的sql是否需要優化了。

key顯示mysql在查詢中實際使用的索引,若沒有使用索引,顯示為null。

tips查詢中若使用了覆蓋索引(覆蓋索引:索引的資料覆蓋了需要查詢的所有資料),則該索引僅出現在key列表中

key_length索引長度

ref表示上述表的連線匹配條件,即哪些列或常量被用於查詢索引列上的值

rows返回估算的結果集數目,並不是乙個準確的值。

extra的資訊非常豐富,常見的有:

using index 使用覆蓋索引

using where 使用了用where子句來過濾結果集

using filesort 使用檔案排序,使用非索引列進行排序時出現,非常消耗效能,盡量優化。

using temporary 使用了臨時表

簡單先寫到這裡,想起來在做補充

面試題總結 html面試題)

附上鏈結 doctype 的作用是什麼?宣告一般位於文件的第一行,它的作用主要是告訴瀏覽器以什麼樣的模式來解析文件。一般指定了之後會以標準模式來 進行文件解析,否則就以相容模式進行解析。在標準模式下,瀏覽器的解析規則都是按照最新的標準進行解析的。而在相容模式下,瀏 覽器會以向後相容的方式來模擬老式瀏...

面試題總結

網路部分 子網劃分 演算法部分 穩定排序 泡沫排序 bubble sort o n 插入排序 insertion sort o n 桶排序 bucket sort o n 需要 o k 額外空間 計數排序 counting sort o n k 需要 o n k 額外空間 合併排序 merge so...

面試題總結

1 關於商品秒殺的問題,如何保證100件商品,只能使前100個使用者搶到呢?思路1 我們可以使用redis快取的list儲存型別,當有乙個使用者請求到來時,將該使用者的id存放在list中,這樣當list中的llen長度達到100時就不在新增新的使用者id,然後在從list中取出對應的id運算元據庫...