[英]Spring data JPA with SQL Server - lower() function causes full table scan
在一個簡單的SpringBoot(2.0.5)+ JPA + SQL Server微服務中,它通過JpaRepository
實現進行持久化(沒有其他方法),我們看到transact-sql lower()
函數被注入到生成的SQL中,該SQL包裝了查詢的列),這反過來會導致全表掃描 ,因此會影響本來是簡單,快速的索引支持的查詢的性能。
顯然,這是為了使查詢不區分大小寫,但是由於默認情況下SQL Server不區分大小寫,因此無需注入此函數。 我可以從Spring Data JPA文檔中看到,使用IgnoreCase
存儲庫方法加后綴的情況下,默認情況下區分大小寫的DB應該使查詢不區分大小寫,但是我看不到如何配置它以適應傳入的大小寫。
JPA配置:
jpa:
show-sql: true
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
dialect: org.hibernate.dialect.SQLServer2012Dialect
ddl-auto: validate
倉庫接口:
@Repository
public interface MyRepo extends JpaRepository<Thing, Long>, QuerydslPredicateExecutor<Thing> {}
我嘗試從配置中刪除SQLServer2012Dialect
沒什么區別。 我不確定QueryDSL的額外使用是否會產生影響-我將嘗試暫時刪除它(盡管這是必需的)。
在仔細檢查QueryDsl謂詞時,這是直接的(並且是自我造成的)-將謂詞中equalsIgnoreCase()
的使用更改為eq()
,從而解決了該問題。 因此,配置或庫中沒有問題,只有一個需要注意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.