[SQL]Mysql Indexの使用方法
1
2 B-tree
上部はルートノード、中央はブランチノード、下部はリーフノードです.
リーフノードには、実際のデータベースに記録されたアドレスがあります.
BツリーのBはバランスツリー、Bツリーはバランスツリーです.バランスツリーとは、根から葉までの距離がバランスしていることを意味します.
ルートノードからリーフノードへの各ステップB−Treeは、二乗的に増加する.
-したがって、データ量が多くても、実際にデータを検索した回数は思ったより多くはありません.
その結果、B-Treeを使用する場合、ディスクI/Oに要する時間はデータ量に関係なく、性能の均一性が確保される.
3.索引の使用例
パフォーマンスの比較に使用するクエリーは次のとおりです.
注:クエリ実行情報は、ノードの重複を示すTREE出力形式で表示されます.EXPLAIN ANALYZEは常にTREE出力形式を使用します.
1.EXPLAIN:EXPLAIN MySQLサーバが実行するクエリー、すなわち実行計画を理解するために使用します。
explainはMySQL 8.0.19以降をサポートします.
オプティマイザからクエリーを実行する計画を取得して表示します.
EXPLAIN
SELECT *
FROM table t
WHERE 1=1
AND virtual_card_yn = 'N'
AND card_seq > 0
- explain format = json 으로 주면 더 많은 정보를 알려줍니다.
- MySQL Workbench를 사용하면 Visual Explain를 활용할 수 있습니다.
- 가장 직관적으로 Explain을 확인할 수 있습니다.
2.EXPLAIN ANALYZE:下記の通り。
1. 예상 실행 비용 (일부 반복자는 비용 모델에서 설명되지 않으므로 추정치에 포함되지 않습니다.)
2. 반환된 행의 예상 수
3. 첫 번째 행을 반환하는 시간 모든 행을 반환하는 데 걸리는 시간(실제 비용)
4. (여러 개의 루프가 있는 경우 이 그림은 루프당 평균 시간을 나타냅니다.) iterator가 반환한 행 수 루프 수
クエリ実行の推定コスト結果行の予想数
結果の最初のローを返す時間(ミリ秒)
すべての結果を返す時間(ミリ秒)
反復器が返すローの数
ループ実行回数
3.使用例
SHOW index FROM table_name
ALTER TABLE tablename ADD INDEX indexname (column1, column2);
ADD INDEX idx_age (col1);
インデックスの設定方法インデックスを正しく設定するには、インデックスを個別に宣言する必要があります.
//X -> INDEX(id, age)
//O -> INDEX(id), INDEX(age)
SELECT * FROM table1 USE INDEX (col1_index,col2_index)
WHERE col1=1 AND col2=2 AND col3=3;
SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;
実習
SHOW INDEX FROM cust_card_apply_hist
`Table` : cust_card_apply_hist
`Key_name` : idx_cust_card_apply_hist_01
`Seq_in_index` : 3
`Column_name` : APPLY_TYPE_CD
`Index_type` : BTREE
`Cardinality` : 53588
EXPLAIN ANALYZEで比較
- 2-1. use index **사용안하고** :
-> Filter: (ccah.PLATFORM_CD = 'A') (cost=6229.55 rows=6109) (actual time=0.100..50.178 rows=34828 loops=1)-> Table scan on ccah (cost=6229.55 rows=61093) (actual time=0.097..42.047 rows=104972 loops=1)
2-2. use indexを使用するには:
-> -> Filter: (ccah.PLATFORM_CD = 'A') (cost=6229.55 rows=6109) (actual time=0.092..56.711 rows=34828 loops=1)
-> Table scan on ccah (cost=6229.55 rows=61093) (actual time=0.089..48.410 rows=104972 loops=1)
実際の時間が減ったことがわかります.
Reference
この問題について([SQL]Mysql Indexの使用方法), 我々は、より多くの情報をここで見つけました https://velog.io/@syh0397/SQL-Mysql-Index-사용법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol