Python Oracle索引未与SQLAlchemy准备的语句一起使用

Python Oracle索引未与SQLAlchemy准备的语句一起使用,python,oracle,indexing,sqlalchemy,prepared-statement,Python,Oracle,Indexing,Sqlalchemy,Prepared Statement,我使用Python和SQLAlchemy访问Oracle 11数据库。 在我看来,SQLAlchemy总是使用事先准备好的语句 在一个巨大的表(400万条记录)上,正确索引,SQLAlchemy过滤器查询不使用索引,因此执行完整表扫描非常慢;在“原始”SQL编辑器(SQLplus)中使用相同的SQL代码可以使Oracle使用性能良好的索引 我们试图在请求上添加“+索引”提示,但对Oracle执行路径没有影响,因为Oracle执行路径仍然不想使用索引 有什么想法吗?有没有可能真的强迫Oracle使

我使用Python和SQLAlchemy访问Oracle 11数据库。 在我看来,SQLAlchemy总是使用事先准备好的语句

在一个巨大的表(400万条记录)上,正确索引,SQLAlchemy过滤器查询不使用索引,因此执行完整表扫描非常慢;在“原始”SQL编辑器(SQLplus)中使用相同的SQL代码可以使Oracle使用性能良好的索引

我们试图在请求上添加“+索引”提示,但对Oracle执行路径没有影响,因为Oracle执行路径仍然不想使用索引

有什么想法吗?有没有可能真的强迫Oracle使用索引,或者让SQLAlchemy不使用预先准备好的语句

致以最良好的祝愿,
蒂埃里(Thierry)

事先准备好的陈述会让事情变得复杂,原因有几个。在Oracle看来,找到准备好的语句可能会有所帮助。使用如下查询搜索它:
select*from v$sql where lower(sql_fulltext)如“%someone unique in your query%”。您可能会发现bind变量上有一个函数,用于阻止索引。至少它会给你一个SQL\u ID。当你有了SQL\u ID后,运行它并将整个结果粘贴到你的问题中:
select*from table(dbms\u xplan.display\u cursor(SQL\u ID=>“SQL\u ID from query”)仅供参考,从Oracle的角度来看,可以通过索引提示语法强制Oracle使用索引:select/*+index(a,index_name)/a。来自表a;