Difference between revisions of "List and DROP all table indexes in MySQL"

From DevOps Notebook
(Created page with "<syntaxhighlight lang="mysql"> SELECT table_name AS `Table`, index_name AS `Index`, GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns` FROM informati...")
 
 
Line 1: Line 1:
 
<syntaxhighlight lang="mysql">  
 
<syntaxhighlight lang="mysql">  
 
+
## List all non-unique indexes
 
SELECT table_name AS `Table`,
 
SELECT table_name AS `Table`,
 
       index_name AS `Index`,
 
       index_name AS `Index`,
Line 8: Line 8:
 
GROUP BY 1,2;
 
GROUP BY 1,2;
  
-- drop all non-unique indexes
+
## drop all non-unique indexes
 
SET SESSION group_concat_max_len=10240;
 
SET SESSION group_concat_max_len=10240;
  
Line 20: Line 20:
 
GROUP BY `Table`;
 
GROUP BY `Table`;
  
-- add all non-unique indexes , WITHOUT index length spec
+
## add all non-unique indexes , WITHOUT index length spec
 
SET SESSION group_concat_max_len=10240;
 
SET SESSION group_concat_max_len=10240;
 
SELECT CONCAT('ALTER TABLE ', `Table`, ' ADD INDEX ', GROUP_CONCAT(CONCAT(`Index`, '(', `Columns`, ')') SEPARATOR ',\n ADD INDEX ') )
 
SELECT CONCAT('ALTER TABLE ', `Table`, ' ADD INDEX ', GROUP_CONCAT(CONCAT(`Index`, '(', `Columns`, ')') SEPARATOR ',\n ADD INDEX ') )

Latest revision as of 11:16, 5 April 2024

 
## List all non-unique indexes
SELECT table_name AS `Table`,
       index_name AS `Index`,
       GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
FROM information_schema.statistics
WHERE NON_UNIQUE = 1 AND table_schema = 'mydb_name' AND table_name = 'mytable_name'
GROUP BY 1,2;

## drop all non-unique indexes
SET SESSION group_concat_max_len=10240;

SELECT CONCAT('ALTER TABLE ', `Table`, ' DROP INDEX ', GROUP_CONCAT(`Index` SEPARATOR ', DROP INDEX '),';' )
FROM (
SELECT table_name AS `Table`,
       index_name AS `Index`
FROM information_schema.statistics
WHERE NON_UNIQUE = 1 AND table_schema = 'mydb_name' AND table_name = 'mytable_name'
GROUP BY `Table`, `Index`) AS tmp
GROUP BY `Table`;

## add all non-unique indexes , WITHOUT index length spec
SET SESSION group_concat_max_len=10240;
SELECT CONCAT('ALTER TABLE ', `Table`, ' ADD INDEX ', GROUP_CONCAT(CONCAT(`Index`, '(', `Columns`, ')') SEPARATOR ',\n ADD INDEX ') )
FROM (
SELECT table_name AS `Table`,
       index_name AS `Index`,
        GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
FROM information_schema.statistics
WHERE NON_UNIQUE = 1 AND table_schema = 'mydb_name' AND table_name = 'mytable_name'
GROUP BY `Table`, `Index`) AS tmp
GROUP BY `Table`;