我目前有一个非常非常非常非常活跃的Postgres数据集,其中一个重要的列索引为较低(列).
我刚刚意识到一些常见的查询非常慢,因为当我使用IExact来匹配该字段时,Django ORM正在为字段生成查询,因为blah = UPPER(列).
是否有一种简单的方法可以强制ORM使用lower()代替,或者我是否需要为这一个删除原始sql?
谢谢!
[评论的侧面问题:是否有一个很好的理由,被忽略了,在索引上使用了upper()而不是lower()?]
解决方法 有趣的情况在这里.我以前从来没有真正停下来想过这件事.似乎使用UPPER进行IExact搜索是在 revision 8536年引入的,以回应近三年前的 ticket 3575.在此之前,Django一直在使用IliKE进行这些类型的搜索.我查看了后端代码,我发现唯一能指出UPPER vs LOWER的任何原因似乎是Oracle在处理不区分大小写的数据时默认为大写.由于其他人是不可知的,似乎Django决定默认使用UPPER来覆盖所有基础.
我从查看源代码得到的另一个印象是你不会使用UPPER.它实际上遍布整个地方,而不仅仅是在实际查询数据库时. Python的上层字符串扩展也经常使用.
我要说的最好的办法就是简单地创建一个带有上部(列)的索引,或者代替,然后去喝一杯.
总结以上是内存溢出为你收集整理的我可以轻松地重写Django ORM’iexact’以使用LOWER()而不是UPPER()吗?全部内容,希望文章能够帮你解决我可以轻松地重写Django ORM’iexact’以使用LOWER()而不是UPPER()吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)