この記事では、SQLiteデータベースのインデックスのリストを返す2つの方法の概要を説明します。
最初の(そして最も明白な)方法は、.indexes
を使用することです。 ドットコマンド。 2番目の方法は、 sql_masterにクエリを実行することです。 テーブル。
.indexesコマンド
.indexes
の使用例を次に示します。 Chinookサンプルデータベースのコマンド。
.indexes
結果:
IFK_AlbumArtistId IFK_PlaylistTrackTrackIdIFK_CustomerSupportRepId IFK_TrackAlbumIdIFK_EmployeeReportsTo IFK_TrackGenreIdIFK_InvoiceCustomerId IFK_TrackMediaTypeIdIFK_InvoiceLineInvoiceId sqlite_autoindex_PlaylistTrack_1IFK_InvoiceLineTrackId
返すインデックスを指定する引数を指定することもできます。インデックスのフルネームを指定するか、パターンマッチングを使用して、そのパターンに一致するすべてのインデックスを返すことができます。
パターンマッチングの使用例:
.indexes %invoice%
結果:
IFK_InvoiceCustomerId IFK_InvoiceLineInvoiceId IFK_InvoiceLineTrackId
sqlite_masterテーブル
.indexes
の代わりとして コマンドを使用すると、 sql_masterに対してクエリを実行できます。 テーブル。
このテーブルには単なるインデックス以上のものが含まれていますが、WHERE
を使用できます インデックスのみに絞り込む句:
SELECT name
FROM sqlite_master
WHERE type = 'index';
結果:
IFK_AlbumArtistIdsqlite_autoindex_PlaylistTrack_1IFK_CustomerSupportRepIdIFK_EmployeeReportsToIFK_InvoiceCustomerIdIFK_InvoiceLineInvoiceIdIFK_InvoiceLineTrackIdIFK_PlaylistTrackTrackIdIFK_TrackAlbumIdIFK_TrackGenreIdIFK_TrackMediaTypeId
このメソッドを使用する利点の1つは、各インデックスが属するテーブルを返すこともできることです。これはtbl_nameに保存されます 列。
例:
.mode column
.headers on
.width 32 13
SELECT
name,
tbl_name
FROM sqlite_master
WHERE type = 'index';
戻る:
name tbl_name -------------------------------- ------------- IFK_AlbumArtistIdアルバムsqlite_autoindex_PlaylistTrack_1PlaylistTrackIFK_CustomerSupportRepId顧客IFK_EmployeeReportsTo従業員IFK_InvoiceCustomerId請求書IFK_InvoiceLineInvoiceIdInvoiceLineIFK_InvoiceLineTrackId InvoiceLineIFK_PlaylistTrackTrackIdPlaylistTrackIFK_TrackAlbumIdトラックIFK_Track