Skip to content

Conversation

@yuanoOo
Copy link
Contributor

@yuanoOo yuanoOo commented Oct 27, 2025

🚀 Feature Description

Optimize the performance of _index_query method in OceanBase Oracle mode by adding early filtering conditions to reduce data scanning.

🎯 Optimization Details

  • Override _index_query method in OceanBaseDialect_cx_oracle class
  • Add filtering condition on all_ind_columns.table_name
  • Filter data early in query execution to avoid full table scan

🔧 Technical Implementation

Key Optimization

# Added in WHERE clause:
dictionary.all_ind_columns.c.table_name.in_(bindparam("all_objects"))

SQL Query Optimization

Before:

WHERE a_indexes.table_owner = :owner 
  AND a_indexes.table_name IN (:all_objects)

After:

WHERE a_indexes.table_owner = :owner 
  AND a_indexes.table_name IN (:all_objects)
  AND a_ind_columns.table_name IN (:all_objects)  -- New optimization condition

📈 Performance Benefits

  • ✅ Reduces data scanning on all_ind_columns table
  • ✅ Filters target table data early in query execution
  • ✅ Avoids full table scan, significantly improving query performance
  • ✅ Particularly beneficial for databases with large numbers of indexes

🧪 Testing & Validation

  • ✅ Created and ran test script to verify optimization is effective
  • ✅ Confirmed generated SQL contains optimization conditions
  • ✅ Compatible with SQLAlchemy 2.x version

📝 Compatibility

  • Only supports SQLAlchemy 2.x version
  • Version control through SA_20_PLUS flag
  • No impact on existing functionality

🔗 Related Files

  • oceanbase-sqlalchemy-plugin/oceanbase_sqlalchemy/cx_oracle.py

- Add table_name filtering on all_ind_columns to reduce data scan
- Override _index_query method in OceanBaseDialect_cx_oracle
- Add early filtering condition: all_ind_columns.table_name IN (all_objects)
- Significantly improve query performance for index metadata retrieval
- Compatible with SQLAlchemy 2.x only

Performance improvement:
- Reduces amount of data scanned early in query execution
- Avoids full table scan on all_ind_columns
- Optimizes index query performance in OceanBase Oracle mode
@yuanoOo yuanoOo added the enhancement New feature or request label Oct 27, 2025
@yuanoOo yuanoOo merged commit 79094d3 into oceanbase:main Oct 27, 2025
6 checks passed
yuanoOo added a commit that referenced this pull request Oct 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant