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 目標 必須要有目標,沒有目標和方向效率會大大的折扣.當然不僅僅是學習,更是生活,事業,和人的整個一生.這點公尺老師非常的重視,每個學習階段都給...