MySQLデータベースインデックス使用シーン&注意事項

3699 ワード

目次
1.インデックスをサポートするクエリ2.注意事項と提案3.福祉彩卵
インデックスをサポートするクエリーは何ですか?
1 MySQLは現在、プリアンブル列をサポートしています
     ,mysql                。
  :      
create index idx_a_b_c on tb1(a,b,c)
                    
1.where a=?
2.where a = ? and b = ?
3.where a = ? and b = ? and c = ?
 
4.where a = ? and c = ?
     mysql    a     

2.索引列の範囲検索
             ,         ,    where ... between 
and ... > ,<      ,            ,             ,               
。
   in            

3.join列
         ,        select a.col1,b.col2 from a join b on a.id = b.id,
  id        ,  a   ,  a        ,           a  ,
   a    id    b           。

4.where句
  :
where a = ? and b = ? and c>1000
where a = ? and b = ? and c = ? and d>1000

where                  +         

create  index idx_a_b_c_d on tb1(a,b,c,d);

  :
where a = ? and b = ? and c>1000
where a = ? and b = ? and c = ? and d>1000
        

      :
where a = ? and b =? and c>10000 and d< 10000
     d 
d <10000         
where a >? and b =? and c>10000 and d< 10000
     a       ,  b、c、d             
  ,    ,                。

5.mysqlオプティマイザ
mysql            ,        max(   )        。  max,min           。

二注意事項と提案
1.where条件のインデックス列は式の一部ではありません.mysqlは関数インデックスをサポートしていません.
2.InnoDB二次索引下位葉極点は索引+主キー値を記憶する
InnoDB                    ,      ,          ,   ID ,             ,                     。

3.インデックスはできるだけ高選択性である
        ,                ,  ,
                   ,                   ,                ,
       ,         。
          ,                        ,
                      。

4.より短いインデックスを使用
        ,                        。
 :alter table test add  key(col(6))
             。
select  count(distinct left(col_name,5))/count(*) As sele5,
select  count(distinct left(col_name,6))/count(*) As sele6,
select  count(distinct left(col_name,7))/count(*) As sele7,
select  count(distinct left(col_name,8))/count(*) As sele8,
select  count(distinct left(col_name,9))/count(*) As sele9
from table_name;

5.インデックスの作成が多すぎないようにする
             
             ,           ,          ,
  ,         ,          。

6.ユニークな値のカラムの場合は、ユニークなインデックスを作成する方がよいし、重複するデータが発生しないことを確認することもできる.
7.上書きインデックスを使用するとパフォーマンスが大幅に向上
    :             ,          。        idx_a_b_c     tb1   a、b、c   ,
       sql   
select a,b from tb1 where a = ? and b = ? and c =?
mysql       idx_a_b_c       。                 。
  explain         ,  extra  “using index ”             。

8.インデックスによるソート
mysql              ,         ,           ,           
     :
   1.         order by     ,            。
        table1      idx_a_b_c(   a,b,c );
     :select * from table1 order by  a,b,c;
           select * from table1 where a=? and b =? order by c
                        。
   2.       ,  order by                  。

9冗長インデックスを追加するには、次の点を考慮する必要があります.
        column A         (columnA,columnB)      
                ,            ,           ,            。
         ,           ,          ,           。

3.福祉彩卵
職位:テンセントOMG広告バックグラウンドの高級開発エンジニア;Base:深セン;シーン:膨大なデータ、To B、To C、シーンは非常に挑戦的です.基礎要求:常用データ構造とアルゴリズムを熟知する;常用ネットワークプロトコルを熟知し、ネットワークプログラミングを熟知する.オペレーティングシステムを熟知し、有線で問題を調査した経験がある.MySQL、oracleを熟知しています;JAVA、GoLang、c++のいずれかの言語を熟知しています.可内推,欢迎各位优秀开发道友私信[微笑み]期待注目私の开発お兄さん、お姉さん达私信私、机会はとても良くて、プラットフォームは震え音に対して、広告の生态のプラットフォーム、Facebookの広告のプラットフォームのようで、あなた达が履歴书で私を壊すことを望みます~连络先の微信13609184526
ブログ引越し:大坤の個人ブログへようこそ