2017-03-14 1 views
0

についての列を選択し、インデックスの使用のサンプルは、テーブルのクエリを作成するには、以下のようになります。選択についての違い*とインデックス

drop table test_index; 
create table test_index(
    id bigint not null auto_increment , 
    `name` varchar(20) not null default '', 
    uid bigint not null default 0, 
    a int not null default 0, 
    b int not null default 0, 
    primary key(id), 
    index `a_b` (a,b) 
); 

select * from test_index where a =10 

select name from test_index where a=10 
の違いは何THEインデックスについて

-------更新---------

多分質問です

select * from test_index where a =10 

select a from test_index where a=10 
の違いは何

THEインデックスについて

+3

インデックスは、WHERE句が返されるレコードを識別するのに役立ちます。私は、このプロセスが返される列の数とは関係がないことを期待しています。索引は列ではなく_records_の検索に関係します。 –

+1

選択リストにインデックス内のフィールドのみが含まれていない限り、その場合、MySQLはテーブル自体を開くことさえありません。 – Shadow

+0

私は両方のクエリの説明を使用して、より多くの情報を提供して私の答えを更新しました – Aegis

答えて

1

MySQLインデックスにはいくつかの目標があります。おそらく最も一般的なものは次のとおりです。

  • WHERE句に一致する行を検索します。
  • 考慮から行を破棄する。詳細については

check here

しかし、両方のクエリで説明し実行した結果を見て、いくつかの違いを示しているようです。

explain select * from test_index where a = 10; 
+----+-------------+------------+------------+------+---------------+------+---------+-------+------+----------+-------+ 
| id | select_type | table  | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | 
+----+-------------+------------+------------+------+---------------+------+---------+-------+------+----------+-------+ 
| 1 | SIMPLE  | test_index | NULL  | ref | a_b   | a_b | 4  | const | 1 | 100.00 | NULL | 
+----+-------------+------------+------------+------+---------------+------+---------+-------+------+----------+-------+ 

explain select a from test_index where a = 10; 
+----+-------------+------------+------------+------+---------------+------+---------+-------+------+----------+-------+ 
| id | select_type | table  | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | 
+----+-------------+------------+------------+------+---------------+------+---------+-------+------+----------+-------+ 
| 1 | SIMPLE  | test_index | NULL  | ref | a_b   | a_b | 4  | const | 1 | 100.00 | NULL | 
+----+-------------+------------+------------+------+---------------+------+---------+-------+------+----------+-------+ 

追加フィールドに注目すると、違いがあることがわかります。最初のクエリでは、その値はnullです。2番目のクエリにインデックスを使用しています。

ドキュメントを見ると、私たちはこの違いが何を意味するか見ることができます:

  • explain docsからのための余分な列にインデックス値を使用: 列情報を使用して、テーブルから取得されます実際の行を読み取るために追加のシークを行う必要なしに、インデックスツリー内の情報のみを削除します。この方法は、単一の索引の一部である列のみを問合せが使用する場合に使用できます。他の場合には

  • ヌルindex type docsフルスキャンテーブルを用いて実行されるに従って、対応するインデックス順にデータ行をルックアップするために、このインデックスから読み出します。

+0

これは、downvoteの理由を知ることが役に立ちます – Aegis

+0

ありがとう、最初のSQLについての説明reslutを入力してください。 – petrie

+0

嬉しいことに、あなたのお手伝いをしました。 – Aegis

関連する問題