2026-10-11-market-payment-indexes.sql 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. -- 市场移动端催缴/缴费查询索引(MySQL 5.7)。
  2. -- 同名索引定义不一致时重建,重复执行保持幂等。
  3. SET @schema_name = DATABASE();
  4. SET @index_name = 'idx_biz_protocol_payment_schedule_market_scope';
  5. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','),
  6. MIN(non_unique),
  7. MAX(non_unique),
  8. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END),
  9. COUNT(DISTINCT index_type),
  10. MIN(index_type)
  11. INTO @index_columns,
  12. @index_non_unique_min,
  13. @index_non_unique_max,
  14. @index_prefix_columns,
  15. @index_type_count,
  16. @index_type
  17. FROM information_schema.statistics
  18. WHERE table_schema = @schema_name
  19. AND table_name = 'biz_protocol_payment_schedule'
  20. AND index_name = @index_name;
  21. SET @ddl = CASE
  22. WHEN @index_columns = 'tenant_no,sample_payment_id,del_flag'
  23. AND @index_non_unique_min = 1
  24. AND @index_non_unique_max = 1
  25. AND @index_prefix_columns = 0
  26. AND @index_type_count = 1
  27. AND @index_type = 'BTREE' THEN 'SELECT 1'
  28. WHEN @index_columns IS NULL THEN
  29. 'ALTER TABLE biz_protocol_payment_schedule ADD INDEX idx_biz_protocol_payment_schedule_market_scope (tenant_no, sample_payment_id, del_flag)'
  30. ELSE
  31. 'ALTER TABLE biz_protocol_payment_schedule DROP INDEX idx_biz_protocol_payment_schedule_market_scope, ADD INDEX idx_biz_protocol_payment_schedule_market_scope (tenant_no, sample_payment_id, del_flag)'
  32. END;
  33. PREPARE stmt FROM @ddl;
  34. EXECUTE stmt;
  35. DEALLOCATE PREPARE stmt;
  36. SET @index_name = 'idx_biz_protocol_payment_transfer_market_scope';
  37. SELECT GROUP_CONCAT(column_name ORDER BY seq_in_index SEPARATOR ','),
  38. MIN(non_unique),
  39. MAX(non_unique),
  40. SUM(CASE WHEN sub_part IS NOT NULL THEN 1 ELSE 0 END),
  41. COUNT(DISTINCT index_type),
  42. MIN(index_type)
  43. INTO @index_columns,
  44. @index_non_unique_min,
  45. @index_non_unique_max,
  46. @index_prefix_columns,
  47. @index_type_count,
  48. @index_type
  49. FROM information_schema.statistics
  50. WHERE table_schema = @schema_name
  51. AND table_name = 'biz_protocol_payment_transfer'
  52. AND index_name = @index_name;
  53. SET @ddl = CASE
  54. WHEN @index_columns = 'tenant_no,schedule_id,del_flag'
  55. AND @index_non_unique_min = 1
  56. AND @index_non_unique_max = 1
  57. AND @index_prefix_columns = 0
  58. AND @index_type_count = 1
  59. AND @index_type = 'BTREE' THEN 'SELECT 1'
  60. WHEN @index_columns IS NULL THEN
  61. 'ALTER TABLE biz_protocol_payment_transfer ADD INDEX idx_biz_protocol_payment_transfer_market_scope (tenant_no, schedule_id, del_flag)'
  62. ELSE
  63. 'ALTER TABLE biz_protocol_payment_transfer DROP INDEX idx_biz_protocol_payment_transfer_market_scope, ADD INDEX idx_biz_protocol_payment_transfer_market_scope (tenant_no, schedule_id, del_flag)'
  64. END;
  65. PREPARE stmt FROM @ddl;
  66. EXECUTE stmt;
  67. DEALLOCATE PREPARE stmt;