010_add_user_list_indexes_safe.sql 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. -- DDL 010: USER_LIST 테이블 인덱스 추가 (안전 버전)
  2. -- 생성일: 2025-07-22
  3. -- 목적: USER_LIST 추가 컬럼에 대한 검색 최적화 인덱스 (중복 방지)
  4. -- 1. INFLUENCER_TYPE 인덱스 추가 (존재하지 않는 경우에만)
  5. SET @sql = IF(
  6. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  7. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_influencer_type') = 0,
  8. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_influencer_type` (`INFLUENCER_TYPE`)',
  9. 'SELECT "idx_influencer_type already exists" as info'
  10. );
  11. PREPARE stmt FROM @sql;
  12. EXECUTE stmt;
  13. DEALLOCATE PREPARE stmt;
  14. -- 2. PRIMARY_CATEGORY 인덱스 추가 (존재하지 않는 경우에만)
  15. SET @sql = IF(
  16. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  17. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_primary_category') = 0,
  18. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_primary_category` (`PRIMARY_CATEGORY`)',
  19. 'SELECT "idx_primary_category already exists" as info'
  20. );
  21. PREPARE stmt FROM @sql;
  22. EXECUTE stmt;
  23. DEALLOCATE PREPARE stmt;
  24. -- 3. VERIFICATION_STATUS 인덱스 추가 (존재하지 않는 경우에만)
  25. SET @sql = IF(
  26. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  27. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_verification_status') = 0,
  28. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_verification_status` (`VERIFICATION_STATUS`)',
  29. 'SELECT "idx_verification_status already exists" as info'
  30. );
  31. PREPARE stmt FROM @sql;
  32. EXECUTE stmt;
  33. DEALLOCATE PREPARE stmt;
  34. -- 4. FOLLOWER_COUNT 인덱스 추가 (존재하지 않는 경우에만)
  35. SET @sql = IF(
  36. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  37. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_follower_count') = 0,
  38. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_follower_count` (`FOLLOWER_COUNT`)',
  39. 'SELECT "idx_follower_count already exists" as info'
  40. );
  41. PREPARE stmt FROM @sql;
  42. EXECUTE stmt;
  43. DEALLOCATE PREPARE stmt;
  44. -- 5. EMAIL 인덱스 추가 (존재하지 않는 경우에만)
  45. SET @sql = IF(
  46. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  47. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_email') = 0,
  48. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_email` (`EMAIL`)',
  49. 'SELECT "idx_email already exists" as info'
  50. );
  51. PREPARE stmt FROM @sql;
  52. EXECUTE stmt;
  53. DEALLOCATE PREPARE stmt;
  54. -- 6. NICK_NAME 인덱스 추가 (존재하지 않는 경우에만)
  55. SET @sql = IF(
  56. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  57. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_nick_name') = 0,
  58. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_nick_name` (`NICK_NAME`)',
  59. 'SELECT "idx_nick_name already exists" as info'
  60. );
  61. PREPARE stmt FROM @sql;
  62. EXECUTE stmt;
  63. DEALLOCATE PREPARE stmt;
  64. -- 7. 복합 인덱스: 타입, 카테고리, 인증상태 (존재하지 않는 경우에만)
  65. SET @sql = IF(
  66. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  67. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_type_category_verified') = 0,
  68. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_type_category_verified` (`INFLUENCER_TYPE`, `PRIMARY_CATEGORY`, `VERIFICATION_STATUS`)',
  69. 'SELECT "idx_type_category_verified already exists" as info'
  70. );
  71. PREPARE stmt FROM @sql;
  72. EXECUTE stmt;
  73. DEALLOCATE PREPARE stmt;
  74. -- 8. 복합 인덱스: 카테고리, 팔로워수, 인증상태 (존재하지 않는 경우에만)
  75. SET @sql = IF(
  76. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  77. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_category_follower_verified') = 0,
  78. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_category_follower_verified` (`PRIMARY_CATEGORY`, `FOLLOWER_COUNT`, `VERIFICATION_STATUS`)',
  79. 'SELECT "idx_category_follower_verified already exists" as info'
  80. );
  81. PREPARE stmt FROM @sql;
  82. EXECUTE stmt;
  83. DEALLOCATE PREPARE stmt;
  84. -- 9. 복합 인덱스: 멤버타입, 활성상태, 상태 (존재하지 않는 경우에만)
  85. SET @sql = IF(
  86. (SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
  87. WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'USER_LIST' AND INDEX_NAME = 'idx_member_type_active_status') = 0,
  88. 'ALTER TABLE `USER_LIST` ADD INDEX `idx_member_type_active_status` (`MEMBER_TYPE`, `IS_ACT`, `STATUS`)',
  89. 'SELECT "idx_member_type_active_status already exists" as info'
  90. );
  91. PREPARE stmt FROM @sql;
  92. EXECUTE stmt;
  93. DEALLOCATE PREPARE stmt;