SELECT t.TABLE_SCHEMA, t.TABLE_NAME
FROM information_schema.TABLES AS t
LEFT JOIN information_schema.STATISTICS AS s ON t.TABLE_SCHEMA = s.TABLE_SCHEMA AND t.TABLE_NAME = s.TABLE_NAME
WHERE t.TABLE_SCHEMA = 'your_database_name'
AND s.INDEX_NAME IS NULL
GROUP BY t.TABLE_SCHEMA, t.TABLE_NAME;
SELECT *
FROM INFORMATION_SCHEMA.TABLES AS MAIN_TABLE
WHERE
TABLE_SCHEMA = 'your_database_name'
-- ============================================================================
-- FIND TABLES WITH A PRIMARY KEY
-- ============================================================================
AND TABLE_NAME IN (
SELECT TABLE_NAME
FROM (
SELECT TABLE_NAME, INDEX_NAME, COUNT(INDEX_NAME) AS TEST
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_database_name'
AND INDEX_NAME = 'PRIMARY'
GROUP BY TABLE_NAME , INDEX_NAME) AS TAB_IND_COLS
GROUP BY TABLE_NAME)
-- ============================================================================
-- FIND TABLES WITH OUT ANY INDICES
-- ============================================================================
AND TABLE_NAME NOT IN (
SELECT TABLE_NAME
FROM (
SELECT TABLE_NAME, INDEX_NAME, COUNT(INDEX_NAME) AS TEST
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'your_database_name'
AND INDEX_NAME <> 'PRIMARY'
GROUP BY TABLE_NAME , INDEX_NAME) AS TAB_IND_COLS
GROUP BY TABLE_NAME
);