sql >> Database >  >> RDS >> Mysql

Voer het resultaat van een sql select uit in MySql

U moet voorbereide verklaringen gebruiken .

SET @s:='';
SELECT @s:=concat(@s, 'OPTIMIZE TABLE `', ist.TABLE_SCHEMA,'`.',  ist.TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES ist where table_schema = 'my_schema';    
PREPARE stmt FROM @s;
EXECUTE stmt;

DEALLOCATE PREPARE stmt;

Maar je moet alle optimalisatietabelinstructies in één variabele stoppen, daarom voeg ik @s samen met zichzelf. Anders zou je met een cursor moeten werken, wat onnodig werk is.

ANALYZE TABLE
OPTIMIZE TABLE
REPAIR TABLE

EDIT:Een nog eenvoudigere benadering is deze:

SELECT CONCAT('OPTIMIZE TABLE `', ist.TABLE_SCHEMA,'`.',  ist.TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES ist WHERE table_schema = 'my_schema'
INTO OUTFILE '/tmp/my_optimization';
SOURCE 'tmp/my_optimization';


  1. Hoe te tellen op een vakbondsquery

  2. MySQL producer-consument met meerdere geselecteerde threads

  3. MYSQL, PHP invoegen in meerdere tabellen in database

  4. Waarom retourneert de bovenste bereikfunctie van postgres voor een datumbereik een exclusieve grens?