Skip to content

Instantly share code, notes, and snippets.

@jmccaffrey
Created September 10, 2010 20:45

Revisions

  1. jmccaffrey renamed this gist Sep 10, 2010. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. jmccaffrey created this gist Sep 10, 2010.
    26 changes: 26 additions & 0 deletions mysql_selectivity
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,26 @@
    SELECT
    t.TABLE_SCHEMA
    , t.TABLE_NAME
    , s.INDEX_NAME
    , s.COLUMN_NAME
    , s.SEQ_IN_INDEX
    , (
    SELECT MAX(SEQ_IN_INDEX)
    FROM INFORMATION_SCHEMA.STATISTICS s2
    WHERE s.TABLE_SCHEMA = s2.TABLE_SCHEMA
    AND s.TABLE_NAME = s2.TABLE_NAME
    AND s.INDEX_NAME = s2.INDEX_NAME
    ) AS `COLS_IN_INDEX`
    , s.CARDINALITY AS "CARD"
    , t.TABLE_ROWS AS "ROWS"
    , ROUND(((s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) * 100), 2) AS `SEL %`
    FROM INFORMATION_SCHEMA.STATISTICS s
    INNER JOIN INFORMATION_SCHEMA.TABLES t
    ON s.TABLE_SCHEMA = t.TABLE_SCHEMA
    AND s.TABLE_NAME = t.TABLE_NAME
    WHERE t.TABLE_SCHEMA != 'mysql'
    AND t.TABLE_ROWS > 10
    AND s.CARDINALITY IS NOT NULL
    AND (s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) < 1.00
    ORDER BY `SEL %`, TABLE_SCHEMA, TABLE_NAME
    LIMIT 10;