|
@@ -42,7 +42,8 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
runMigrations();
|
|
runMigrations();
|
|
|
initializeDefaultData();
|
|
initializeDefaultData();
|
|
|
initFoodTables();
|
|
initFoodTables();
|
|
|
- recordSchemaVersion(1);
|
|
|
|
|
|
|
+ runIndexMigrations();
|
|
|
|
|
+ recordSchemaVersion(2);
|
|
|
log.info("数据库初始化完成!");
|
|
log.info("数据库初始化完成!");
|
|
|
} else {
|
|
} else {
|
|
|
log.info("数据库初始化已执行,跳过(schema_version >= 1)");
|
|
log.info("数据库初始化已执行,跳过(schema_version >= 1)");
|
|
@@ -64,6 +65,28 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
jdbcTemplate.update("INSERT INTO schema_version (version) VALUES (?)", version);
|
|
jdbcTemplate.update("INSERT INTO schema_version (version) VALUES (?)", version);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private void runIndexMigrations() {
|
|
|
|
|
+ String[] ddl = {
|
|
|
|
|
+ "CREATE INDEX idx_tasks_family_category ON tasks(family_id, category)",
|
|
|
|
|
+ "CREATE INDEX idx_tasks_family_status ON tasks(family_id, status)",
|
|
|
|
|
+ "CREATE INDEX idx_points_log_family_created ON points_log(family_id, created_at)",
|
|
|
|
|
+ "CREATE INDEX idx_products_category_status ON products(category, status)",
|
|
|
|
|
+ "CREATE INDEX idx_game_records_user_date ON game_records(user_id, created_at)",
|
|
|
|
|
+ "CREATE INDEX idx_articles_status_published ON articles(status, published_at)",
|
|
|
|
|
+ "CREATE INDEX idx_users_phone ON users(phone)",
|
|
|
|
|
+ "CREATE INDEX idx_growth_records_child_date ON growth_records(child_id, record_date)",
|
|
|
|
|
+ "CREATE INDEX idx_product_orders_buyer ON product_orders(buyer_id, status)"
|
|
|
|
|
+ };
|
|
|
|
|
+ for (String sql : ddl) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute(sql);
|
|
|
|
|
+ log.info("Index created: {}", sql.split(" ON ")[0].replace("CREATE INDEX ", ""));
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.debug("Index skipped (may already exist): {}", sql);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void initializeDatabase() {
|
|
private void initializeDatabase() {
|
|
|
try {
|
|
try {
|
|
|
// 尝试连接数据库,如果不存在则创建
|
|
// 尝试连接数据库,如果不存在则创建
|