2 年半後、次の質問に興味をそそられたからです。名前が不適切な「オブジェクト」テーブルを使用して、特定のキーの列を実際に見つけることができます。
たとえば、次の表を考えてみましょう
CREATE TABLE indextest (a INT, b INT);
ALTER TABLE indextest ADD CONSTRAINT indextest_pk PRIMARY KEY (a);
ALTER TABLE indextest ADD CONSTRAINT indextest_uq UNIQUE (a, b);
次に、どの列が に属しているかを調べてみましょうindextest_uq
。
SELECT idxs.id AS index_id, columns.id AS column_id, tables.name AS table_name, columns.name AS column_name, columns.type AS column_type
FROM idxs JOIN objects ON idxs.id=objects.id JOIN tables ON idxs.table_id=tables.id JOIN columns ON idxs.table_id=columns.table_id AND objects.name=columns.name
WHERE idxs.name='indextest_uq';
このクエリの結果は次のようになります。
+----------+-----------+------------+-------------+-------------+
| index_id | column_id | table_name | column_name | column_type |
+==========+===========+============+=============+=============+
| 6446 | 6438 | indextest | a | int |
| 6446 | 6439 | indextest | b | int |
+----------+-----------+------------+-------------+-------------+
明らかに、クエリの一部を拡張することで、columns
およびtables
テーブルからのより多くの情報を含めることができます。SELECT