lib/ecto_mysql_extras/queries/total_index_size.ex
defmodule EctoMySQLExtras.TotalIndexSize do
@moduledoc """
Query the total size of all indexes in the Ecto Repo database.
Primary indexes are not included since InnoDB uses it as the clustered index,
the size represents the table itself.
Data is retrieved from the `information_schema` database and the `tables` table.
"""
@behaviour EctoMySQLExtras
def info do
%{
title: "Total size of all indexes (excluding PRIMARY indexes) in MB",
columns: [
%{name: :size, type: :bytes}
]
}
end
def query(_args \\ []) do
"""
/* ECTO_MYSQL_EXTRAS: #{info().title} */
SELECT CAST(COALESCE(SUM(INDEX_LENGTH),0) AS UNSIGNED) AS `size`
FROM information_schema.tables
WHERE TABLE_SCHEMA = DATABASE();
"""
end
end