
SHOW ENGINES;
命令查看当前 MySQL 版本支持的所有存储引擎及其状态:
SHOW ENGINES;
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
amount DECIMAL(10,2),
order_date DATETIME,
FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB;
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255),
content TEXT,
publish_date DATE
) ENGINE=MyISAM;
-- 创建全文索引
CREATE FULLTEXT INDEX idx_article_content ON articles(title, content);
CREATE TABLE session_data (
session_id CHAR(32) PRIMARY KEY,
user_id INT,
data TEXT,
last_active TIMESTAMP
) ENGINE=Memory;
CREATE TABLE export_data (
id INT,
name VARCHAR(50),
email VARCHAR(100)
) ENGINE=CSV;
CREATE TABLE access_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
ip_address VARCHAR(45),
request_time DATETIME,
url VARCHAR(255)
) ENGINE=Archive;
-- 调整InnoDB缓冲池大小(通常设置为系统内存的50-70%)
SET GLOBAL innodb_buffer_pool_size = 4G;
-- 启用InnoDB文件-per-table模式
SET GLOBAL innodb_file_per_table = 1;
-- 调整日志文件大小
SET GLOBAL innodb_log_file_size = 512M;
-- 启用自适应哈希索引
SET GLOBAL innodb_adaptive_hash_index = 1;
-- 调整键缓冲区大小
SET GLOBAL key_buffer_size = 1G;
-- 启用延迟写入
SET GLOBAL delay_key_write = 1;
-- 优化表(修复碎片)
OPTIMIZE TABLE large_table;
-- 订单表(需要事务)使用InnoDB
CREATE TABLE orders (...) ENGINE=InnoDB;
-- 产品目录表(读多写少)使用MyISAM
CREATE TABLE products (...) ENGINE=MyISAM;
-- 会话表(临时数据)使用Memory
CREATE TABLE sessions (...) ENGINE=Memory;
-- 访问日志表(归档数据)使用Archive
CREATE TABLE access_logs (...) ENGINE=Archive;
-- 将MyISAM表转换为InnoDB
ALTER TABLE old_table ENGINE=InnoDB;
-- 创建新表并复制数据
CREATE TABLE new_table ENGINE=InnoDB AS SELECT * FROM old_table;
-- 复制索引和约束
ALTER TABLE new_table ADD PRIMARY KEY (id);
-- ...添加其他索引和约束
-- 重命名表
RENAME TABLE old_table TO backup_table, new_table TO old_table;
# 导出表结构和数据
mysqldump -u root -p database old_table > old_table.sql
# 编辑SQL文件,修改ENGINE参数
# 将ENGINE=MyISAM改为ENGINE=InnoDB
# 导入修改后的表
mysql -u root -p database < old_table.sql
-- 检查表空间使用情况
SELECT table_name, data_length, index_length
FROM information_schema.tables
WHERE table_schema = 'your_database';
-- 优化表(回收空间)
OPTIMIZE TABLE large_table;
-- 创建Memory表和对应的InnoDB表
CREATE TABLE cache_data (id INT PRIMARY KEY, value VARCHAR(255)) ENGINE=Memory;
CREATE TABLE cache_data_persist LIKE cache_data ENGINE=InnoDB;
-- 定期同步到磁盘
REPLACE INTO cache_data_persist SELECT * FROM cache_data;
-- 启动时恢复数据
REPLACE INTO cache_data SELECT * FROM cache_data_persist;