2026-10-11-market-sample-indexes.sql 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. -- 市场移动端样本统一列表、进度与轻量办理索引(MySQL 5.7)。
  2. -- 同名索引的列顺序、唯一性、前缀或类型不一致时重建;重复执行保持幂等。
  3. SET @schema_name = DATABASE();
  4. SET @table_name = 'biz_protocol_sample';
  5. SET @index_name = 'idx_bps_market_sample_code';
  6. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  7. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  8. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  9. @index_prefix_columns, @index_type_count, @index_type
  10. FROM information_schema.statistics
  11. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  12. SET @ddl = CASE
  13. WHEN @index_columns = 'tenant_no,del_flag,sample_code' AND @index_non_unique_min = 1
  14. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  15. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  16. WHEN @index_columns IS NULL THEN
  17. 'ALTER TABLE biz_protocol_sample ADD INDEX idx_bps_market_sample_code (tenant_no, del_flag, sample_code)'
  18. ELSE
  19. 'ALTER TABLE biz_protocol_sample DROP INDEX idx_bps_market_sample_code, ADD INDEX idx_bps_market_sample_code (tenant_no, del_flag, sample_code)'
  20. END;
  21. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  22. SET @table_name = 'biz_protocol_sample';
  23. SET @index_name = 'idx_bps_market_parent';
  24. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  25. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  26. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  27. @index_prefix_columns, @index_type_count, @index_type
  28. FROM information_schema.statistics
  29. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  30. SET @ddl = CASE
  31. WHEN @index_columns = 'tenant_no,del_flag,collection_protocol_id' AND @index_non_unique_min = 1
  32. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  33. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  34. WHEN @index_columns IS NULL THEN
  35. 'ALTER TABLE biz_protocol_sample ADD INDEX idx_bps_market_parent (tenant_no, del_flag, collection_protocol_id)'
  36. ELSE
  37. 'ALTER TABLE biz_protocol_sample DROP INDEX idx_bps_market_parent, ADD INDEX idx_bps_market_parent (tenant_no, del_flag, collection_protocol_id)'
  38. END;
  39. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  40. SET @table_name = 'biz_research_donation_sample';
  41. SET @index_name = 'idx_brds_market_sample_code';
  42. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  43. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  44. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  45. @index_prefix_columns, @index_type_count, @index_type
  46. FROM information_schema.statistics
  47. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  48. SET @ddl = CASE
  49. WHEN @index_columns = 'tenant_no,del_flag,sample_code' AND @index_non_unique_min = 1
  50. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  51. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  52. WHEN @index_columns IS NULL THEN
  53. 'ALTER TABLE biz_research_donation_sample ADD INDEX idx_brds_market_sample_code (tenant_no, del_flag, sample_code)'
  54. ELSE
  55. 'ALTER TABLE biz_research_donation_sample DROP INDEX idx_brds_market_sample_code, ADD INDEX idx_brds_market_sample_code (tenant_no, del_flag, sample_code)'
  56. END;
  57. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  58. SET @table_name = 'biz_research_donation_sample';
  59. SET @index_name = 'idx_brds_market_parent';
  60. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  61. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  62. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  63. @index_prefix_columns, @index_type_count, @index_type
  64. FROM information_schema.statistics
  65. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  66. SET @ddl = CASE
  67. WHEN @index_columns = 'tenant_no,del_flag,research_donation_id' AND @index_non_unique_min = 1
  68. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  69. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  70. WHEN @index_columns IS NULL THEN
  71. 'ALTER TABLE biz_research_donation_sample ADD INDEX idx_brds_market_parent (tenant_no, del_flag, research_donation_id)'
  72. ELSE
  73. 'ALTER TABLE biz_research_donation_sample DROP INDEX idx_brds_market_parent, ADD INDEX idx_brds_market_parent (tenant_no, del_flag, research_donation_id)'
  74. END;
  75. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  76. SET @table_name = 'biz_sample_reception';
  77. SET @index_name = 'idx_bsr_market_sample_progress';
  78. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  79. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  80. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  81. @index_prefix_columns, @index_type_count, @index_type
  82. FROM information_schema.statistics
  83. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  84. SET @ddl = CASE
  85. WHEN @index_columns = 'tenant_no,reception_source,sample_code,del_flag,reception_time' AND @index_non_unique_min = 1
  86. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  87. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  88. WHEN @index_columns IS NULL THEN
  89. 'ALTER TABLE biz_sample_reception ADD INDEX idx_bsr_market_sample_progress (tenant_no, reception_source, sample_code, del_flag, reception_time)'
  90. ELSE
  91. 'ALTER TABLE biz_sample_reception DROP INDEX idx_bsr_market_sample_progress, ADD INDEX idx_bsr_market_sample_progress (tenant_no, reception_source, sample_code, del_flag, reception_time)'
  92. END;
  93. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  94. SET @table_name = 'biz_qc_work_order';
  95. SET @index_name = 'idx_bqwo_market_sample_progress';
  96. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  97. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  98. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  99. @index_prefix_columns, @index_type_count, @index_type
  100. FROM information_schema.statistics
  101. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  102. SET @ddl = CASE
  103. WHEN @index_columns = 'tenant_no,reception_source,trigger_source,sample_code,del_flag' AND @index_non_unique_min = 1
  104. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  105. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  106. WHEN @index_columns IS NULL THEN
  107. 'ALTER TABLE biz_qc_work_order ADD INDEX idx_bqwo_market_sample_progress (tenant_no, reception_source, trigger_source, sample_code, del_flag)'
  108. ELSE
  109. 'ALTER TABLE biz_qc_work_order DROP INDEX idx_bqwo_market_sample_progress, ADD INDEX idx_bqwo_market_sample_progress (tenant_no, reception_source, trigger_source, sample_code, del_flag)'
  110. END;
  111. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  112. SET @table_name = 'biz_storage_release_review';
  113. SET @index_name = 'idx_bsrr_market_sample_progress';
  114. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  115. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  116. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  117. @index_prefix_columns, @index_type_count, @index_type
  118. FROM information_schema.statistics
  119. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  120. SET @ddl = CASE
  121. WHEN @index_columns = 'tenant_no,reception_source,sample_code,del_flag,storage_time' AND @index_non_unique_min = 1
  122. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  123. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  124. WHEN @index_columns IS NULL THEN
  125. 'ALTER TABLE biz_storage_release_review ADD INDEX idx_bsrr_market_sample_progress (tenant_no, reception_source, sample_code, del_flag, storage_time)'
  126. ELSE
  127. 'ALTER TABLE biz_storage_release_review DROP INDEX idx_bsrr_market_sample_progress, ADD INDEX idx_bsrr_market_sample_progress (tenant_no, reception_source, sample_code, del_flag, storage_time)'
  128. END;
  129. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  130. SET @table_name = 'biz_protocol_storage_cert';
  131. SET @index_name = 'idx_bpsc_market_parent';
  132. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  133. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  134. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  135. @index_prefix_columns, @index_type_count, @index_type
  136. FROM information_schema.statistics
  137. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  138. SET @ddl = CASE
  139. WHEN @index_columns = 'tenant_no,collection_protocol_id,del_flag' AND @index_non_unique_min = 1
  140. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  141. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  142. WHEN @index_columns IS NULL THEN
  143. 'ALTER TABLE biz_protocol_storage_cert ADD INDEX idx_bpsc_market_parent (tenant_no, collection_protocol_id, del_flag)'
  144. ELSE
  145. 'ALTER TABLE biz_protocol_storage_cert DROP INDEX idx_bpsc_market_parent, ADD INDEX idx_bpsc_market_parent (tenant_no, collection_protocol_id, del_flag)'
  146. END;
  147. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;
  148. SET @table_name = 'biz_protocol_fullmoon_todo';
  149. SET @index_name = 'idx_bpft_market_parent';
  150. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','), MIN(non_unique), MAX(non_unique),
  151. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END), COUNT(DISTINCT index_type), MIN(index_type)
  152. INTO @index_columns, @index_non_unique_min, @index_non_unique_max,
  153. @index_prefix_columns, @index_type_count, @index_type
  154. FROM information_schema.statistics
  155. WHERE table_schema = @schema_name AND table_name = @table_name AND index_name = @index_name;
  156. SET @ddl = CASE
  157. WHEN @index_columns = 'tenant_no,collection_protocol_id,del_flag' AND @index_non_unique_min = 1
  158. AND @index_non_unique_max = 1 AND @index_prefix_columns = 0
  159. AND @index_type_count = 1 AND @index_type = 'BTREE' THEN 'SELECT 1'
  160. WHEN @index_columns IS NULL THEN
  161. 'ALTER TABLE biz_protocol_fullmoon_todo ADD INDEX idx_bpft_market_parent (tenant_no, collection_protocol_id, del_flag)'
  162. ELSE
  163. 'ALTER TABLE biz_protocol_fullmoon_todo DROP INDEX idx_bpft_market_parent, ADD INDEX idx_bpft_market_parent (tenant_no, collection_protocol_id, del_flag)'
  164. END;
  165. PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt;