-- card_id: SQL-MY-02
-- title: MySQL 表与索引目录（只读）
-- engine: MySQL
-- versions: 5.7, 8.0, 8.4
-- risk: R1
-- purpose: 列出一个明确 schema 内的表、近似行数和索引列顺序。
-- input: 把 replace_with_schema 改为已获授权的目标 schema。
-- output: 最多 200 行；行数来自统计信息，只能作为近似值。
-- permission: information_schema 只读可见性；不需要写入权限。
-- resource_limit: 限定单一 schema，最多 200 行，建议客户端超时 10 秒。
-- validation: 已通过 MySQL 8.0.46 与 8.4.10 隔离合成样例契约测试；5.7、生产及客户环境未验证。
-- prohibited: 不得改索引、更新统计、扫描全部 schema 或复制客户业务数据。

SELECT
    t.table_schema AS table_schema,
    t.table_name AS table_name,
    t.table_type AS table_type,
    t.engine AS engine,
    t.table_rows AS approximate_rows,
    COUNT(DISTINCT i.index_name) AS index_count,
    GROUP_CONCAT(
        CONCAT(
            i.index_name,
            ':',
            i.seq_in_index,
            ':',
            i.column_name
        )
        ORDER BY i.index_name, i.seq_in_index
        SEPARATOR ' | '
    ) AS index_columns
FROM information_schema.tables AS t
LEFT JOIN information_schema.statistics AS i
    ON i.table_schema = t.table_schema
   AND i.table_name = t.table_name
WHERE t.table_schema = 'replace_with_schema'
  AND t.table_type IN ('BASE TABLE', 'VIEW')
GROUP BY
    t.table_schema,
    t.table_name,
    t.table_type,
    t.engine,
    t.table_rows
ORDER BY
    t.table_name
LIMIT 200;
