- 1 1. Úvod
- 2 2. Co je OPTIMIZE TABLE? Vysvětlení pro začátečníky
- 3 3. Osvědčené postupy pro spuštění OPTIMIZE TABLE
- 4 4. Alternativní metody a srovnání s OPTIMIZE TABLE
- 5 5. Řešení problémů: Časté chyby a opravy
- 6 6. Často kladené otázky
- 7 7. Shrnutí
1. Úvod
Are you struggling with MySQL performance slowdowns? As a database grows in size, query execution can become slower and may impact the overall performance of your application. One effective way to address this situation is the OPTIMIZE TABLE command.
In this article, we’ll explain MySQL OPTIMIZE TABLE in detail—from basic usage to best practices. The content is designed to be useful for beginners through intermediate users and will help you manage your database efficiently.
2. Co je OPTIMIZE TABLE? Vysvětlení pro začátečníky
Základní koncept OPTIMIZE TABLE
OPTIMIZE TABLE is a MySQL command used to optimize a table. It is typically used for the following purposes:
- Uvolnění úložného prostoru : Reclaims unused space left behind after data deletions.
- Přestavba indexů : Reorganizes indexes to improve data access speed.
- Obnovení statistik : Refreshes statistics used to optimize query execution plans.
Jednoduchá vysvětlení klíčových pojmů
- Úložný engine : Defines how MySQL manages tables (e.g., InnoDB, MyISAM).
- Defragmentace (defrag) : A process that reduces file fragmentation to improve storage efficiency.
Příklad základního použití
Below is the basic SQL command to run OPTIMIZE TABLE:
OPTIMIZE TABLE table_name;
For example, to optimize a table named users, run:
OPTIMIZE TABLE users;
Přehled efektu
Running OPTIMIZE TABLE can reduce table size and improve query speed. This is especially effective for tables where data is frequently updated or deleted.
3. Osvědčené postupy pro spuštění OPTIMIZE TABLE
Příprava před spuštěním
Before running OPTIMIZE TABLE, the following preparations are recommended:
- Vytvořte zálohu
- To prevent data loss in case something goes wrong, back up the table or the entire database.
- Here is a simple backup example:
mysqldump -u username -p database_name > backup.sql
- Zkontrolujte úložný engine
- Confirm that the table uses a storage engine that supports
OPTIMIZE TABLE. - Example:
SHOW TABLE STATUS WHERE Name = 'table_name';
Důležité poznámky během provádění
- Table lock
- Because the table may be locked during execution, it can affect other queries.
- It is recommended to run it outside busy hours, such as late at night or during a maintenance window.
- Execution time
- If the table is large, optimization may take a long time.
- In that case, consider splitting the work or performing partial optimization.
Ověření po provedení
Example command to check the effect after running OPTIMIZE TABLE:
SHOW TABLE STATUS WHERE Name = 'users';
From the results, you can confirm changes in data size and index size.
4. Alternativní metody a srovnání s OPTIMIZE TABLE
Úvod do alternativ
There are several alternatives you can use instead of OPTIMIZE TABLE, such as:
- Manual optimization using ALTER TABLE … ENGINE=InnoDB
- Export & import using mysqldump
- Using partitioning
- Archiving and recreating tables
Manuální optimalizace pomocí ALTER TABLE … ENGINE=InnoDB
As an alternative to OPTIMIZE TABLE, running ALTER TABLE manually can provide more granular control.
Jak spustit
ALTER TABLE table_name ENGINE=InnoDB;
For example, to optimize the users table:
ALTER TABLE users ENGINE=InnoDB;
Výhody
- Provides nearly the same effect as
OPTIMIZE TABLE. - In some MySQL versions, it can be safer than
OPTIMIZE TABLE.
Nevýhody
- If the table is extremely large, downtime may occur.
Export a import pomocí mysqldump
You can export data using mysqldump and then import it back to refresh the entire database.
Jak spustit
mysqldump -u username -p database_name > backup.sql
mysql -u username -p database_name < backup.sql
Výhody
- Platí pro všechny tabulky.
- Protože jsou tabulky kompletně přestavěny, lze maximalizovat efekt optimalizace.
Nevýhody
- Možná bude potřeba dočasně zastavit databázi.
- U velkých databází to může trvat dlouho.
Srovnávací tabulka s alternativami
| Method | Pros | Cons | Best Use Case |
|---|---|---|---|
| OPTIMIZE TABLE | Easy to run | Causes table locking | Small to medium-sized tables |
| ALTER TABLE ENGINE=InnoDB | Similar effect to the optimization MySQL performs internally | Can take a long time for large tables | InnoDB on MySQL 5.7+ |
| mysqldump + import | Can rebuild the entire database | Requires downtime | Optimizing large datasets |
| Partitioning | Improves query speed | Complex to configure | Managing large datasets |
| Archive and recreate | Organizes data and optimizes | Requires additional data management | Tables with lots of old data |
5. Řešení problémů: Časté chyby a opravy
Chyba „Table does not support optimize“
Chybová zpráva
Table does not support optimize, doing recreate + analyze instead
Příčina
- S
InnoDBse chováníOPTIMIZE TABLEzměnilo od MySQL 5.7 a novějších. - Nelze jej použít s úložištěm
MEMORY.
Oprava
- Zkontrolujte úložiště tabulky
SHOW TABLE STATUS WHERE Name = 'table_name';
- Pokud je úložiště
InnoDBALTER TABLE table_name ENGINE=InnoDB;
Nebo obnovte statistiky:
ANALYZE TABLE table_name;
Chyba „Lock wait timeout exceeded“
Chybová zpráva
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
Příčina
- Při spuštění
OPTIMIZE TABLEdojde k zamčení tabulky, což způsobí vypršení časového limitu.
Oprava
- Spouštějte během období s nízkým provozem
- Zvyšte hodnotu časového limitu
SET innodb_lock_wait_timeout = 100;
Chyba „Out of Disk Space“
Chybová zpráva
ERROR 1030 (HY000): Got error 28 from storage engine
Příčina
- Nedostatek místa na disku pro vytvoření dočasných souborů během
OPTIMIZE TABLE.
Oprava
- Zkontrolujte volné místo na disku
df -h
- Změňte dočasný adresář Upravit
my.cnf:[mysqld] tmpdir = /path/to/larger/tmp
Shrnutí
V této sekci jsme pokryli běžné chyby OPTIMIZE TABLE a jak je opravit. Když k chybám dojde, ujistěte se, že zkontrolujete úložiště, řešíte zamykání a zajistíte dostatek místa na disku.

6. Často kladené otázky
Existuje riziko ztráty dat při spuštění OPTIMIZE TABLE?
Odpověď
Obvykle spuštění OPTIMIZE TABLE nezpůsobí ztrátu dat. Nicméně, pokud během procesu dojde k chybě, data mohou být poškozena.
Z tohoto důvodu se doporučuje předem provést zálohu.
Jak provést zálohu
mysqldump -u username -p database_name > backup.sql
Jak často bych měl spouštět OPTIMIZE TABLE?
Odpověď
Závisí to na tom, jak často mažete data, ale obecně se doporučuje spouštět to jednou týdně až jednou za měsíc.
Může být ještě účinnější v následujících případech:
- Tabulky s častým mazáním
- Indexy jsou fragmentované
- Rychlost provádění dotazů se zhoršila
Můžu automatizovat OPTIMIZE TABLE?
Odpověď
Můžete to automatizovat pomocí MySQL Event Scheduler nebo cron úlohy.
Použití MySQL Event Scheduler
CREATE EVENT optimize_tables
ON SCHEDULE EVERY 7 DAY
DO
OPTIMIZE TABLE table_name;
Použití cron úlohy
crontab -e
Přidejte následující řádek (spouští se každou neděli v 3:00 ráno):
0 3 * * 0 mysql -u username -p'yourpassword' -e "OPTIMIZE TABLE database_name.table_name;"
Co dělat, když OPTIMIZE TABLE nepomůže?
Odpověď
- Zkontrolujte úložiště
SHOW TABLE STATUS WHERE Name = 'table_name';
- Zkontrolujte plán provádění
EXPLAIN SELECT * FROM table_name WHERE column_name = 'value';
- Obnovte statistiky
ANALYZE TABLE table_name;
- Pokud je tabulka příliš velká
- Zálohujte pomocí
mysqldumpa znovu importujte - Zvažte rozdělení (partitioning)
Tento FAQ pokrývá běžné otázky ohledně OPTIMIZE TABLE a praktická řešení.
7. Shrnutí
V tomto článku jsme podrobně vysvětlili MySQL OPTIMIZE TABLE.
Optimalizace tabulek je nezbytná pro zlepšení výkonu databáze, ale pokud ji použijete ve špatných situacích, mohou být výhody omezené.
Klíčové body OPTIMIZE TABLE
| Item | Details |
|---|---|
| Purpose | Improve database performance and optimize storage |
| What it does | Defrag data files, rebuild indexes, refresh statistics |
| Recommended frequency | Weekly to monthly (more often for tables with frequent deletions) |
| Storage engines | MyISAM: strong benefits, InnoDB: benefits may be limited |
Kdy je OPTIMIZE TABLE účinný
Spouštění OPTIMIZE TABLE se doporučuje v následujících případech:
- Časté mazání dat
- Chcete ušetřit místo na disku
- SELECT dotazy se zpomalují
- Vyskytuje se fragmentace indexů
Kontrolní seznam před spuštěním
✅ Vytvořte zálohu
mysqldump -u username -p database_name > backup.sql
✅ Zkontrolujte úložiště
SHOW TABLE STATUS WHERE Name = 'table_name';
✅ Spusťte během hodin s nízkým provozem
✅ Obnovte statistiky
ANALYZE TABLE table_name;
Porovnání s alternativami
V závislosti na situaci mohou být metody jiné než OPTIMIZE TABLE vhodnější.
| Method | Pros | Cons | Best Use Case |
|---|---|---|---|
| OPTIMIZE TABLE | Easy to run | Causes table locking | Small to medium-sized tables |
| ALTER TABLE ENGINE=InnoDB | Similar optimization effect | Takes longer on large tables | InnoDB on MySQL 5.7+ |
| mysqldump + restore | Complete optimization by rebuilding tables | Requires downtime | Optimizing large datasets |
Závěrečný kontrolní seznam
✅ Používáte správný úložný engine?
✅ Vytvořili jste zálohu?
✅ Spustíte to během hodin s nízkým provozem?
✅ Zvážili jste, zda je potřeba alternativní metoda?
Závěr
Používejte OPTIMIZE TABLE vhodně, aby byla výkonnost MySQL zdravá!
Doufáme, že vám tento článek pomůže při správě databáze.


