利用索引優化查詢,提高效率

2021-07-11 09:33:17 字數 2442 閱讀 9190

1、在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引。

2、在頻繁進行排序或分組(即進行group by或order by操作)的列上建立索引。

3、在條件表示式中經常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的「性別」列上只有「男」與「女」兩個不同值,因此就無必要建立索引。如果建立索引不但不會提高查詢效率,反而會嚴重降低更新速度。

4、如果待排序的列有多個,可以在這些列上建立復合索引(compound index)。

(1)在下面兩條select語句中:

select * from table1 where field1<=10000

and field1>=0;

select * from table1 where field1>=0

and field1<=10000;

如果資料表中的資料field1都》=0,則第一條select語句要比第二條select語句效率高的多,因為第二條select語句的第乙個條件耗費了大量的系統資源。

第乙個原則:在where子句中應把最具限制性的條件放在最前面。!!!!
(2)在下面的select語句中:

select * from tab where a=… and b=… and c=…;
若有索引index(a,b,c),則where子句中字段的順序應和索引中欄位順序一致。

第二個原則:where子句中字段的順序應和索引中欄位順序一致。!!!!
(3)如果對多列進行索引(組合索引),列的順序非常重要,mysql僅能對索引最左邊的字首進行有效查詢。例如:存在組合索引it1c1c2(c1,c2)。

查詢語句select * from t1 where c1=1 and c2=2能夠使用該索引。

查詢語句select * from t1 where c1=1也能夠使用該索引。

但是,查詢語句select * from t1 where c2=2不能夠使用該索引,因為沒有組合索引的引導列,即,要想使用c2列進行查詢,必需出現c1等於某值。

(4)當order by 中的字段出現在where條件中時,才會利用索引而不排序,更準確的說,order by 中的字段在執行計畫中利用了索引時,不用排序操作。

這個結論不僅對order by有效,對其他需要排序的操作也有效。比如group by 、union 、distinct等。

1.如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什麼盡量少用or的原因)。

注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引。

2.對於多列索引,不是使用的第一部分,則不會使用索引。

3.like查詢是以%開頭。(以%結尾,索引可以使用)

4.如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引。

假設mysql資料庫表:

create

table t{

k int unsigned not

null auto_increment,

a date,

b varchar(24),

c int,d varchar(24),

primary

key(k),unique

key a_index (a desc,b desc),

key k1(b),key k2(c),key k3(d));

如下哪些sql語句查詢能較好的利用索引?()

正確答案: a d

a、select b from

where b like

'aaa%';

b、select a,b from t where a='2015-10-25'

order

by b asc,c asc;

c、select a,b,c from t where a='2015-10-25'

order

by b asc;

d、select a,b,c from t where a='2015-10-25'

order

by a,b;

由unique key a_index (a desc,b desc)可知,該錶按a 降序,b降序建立了唯一索引。

當order by 字段出現在where條件中時,才會利用索引而無需排序操作。!!!!!!

如何提高效率

如果問 你想不想使自己的收入加倍 我猜每個人的答案都是 yes 如果我繼續問 你相不相信現在你的收入會加倍 我想有一些人可能會沒把握,有一些人認為不太可能,我告訴各位 你們每個人的收入一定會加 倍 因為按照每年物價增長率及通貨膨脹的正常速度,20年後你的收入一定會加倍。但是如果你希望,提前在5年內 ...

Python 提高效率

最近師兄給了小任務,算乙個p值。任務詳情是這樣的 第一步,有基因集a,23個元素,基因集b,451個元素,共有23 451 9922個組合 當然你要考慮去重 看在ppi資料庫 145萬多行資料 中出現的組合總個數 觀察值 第二步,然後再以hg19中基因為背景基因集,放回隨機抽取23個基因構成基因集c...

如何提高效率

在提高班學習有很長的一段時間了,學習的收穫中有一點是非常的明顯,那就是自己的效率明顯的比原來高出許多,現在就按照自己的切身體會來總結一下如何提高自己效率.1 目標 必須要有目標,沒有目標和方向效率會大大的折扣.當然不僅僅是學習,更是生活,事業,和人的整個一生.這點公尺老師非常的重視,每個學習階段都給...