Changes between Initial Version and Version 21 of Ticket #3575
- Timestamp:
- Jun 30, 2008, 12:50:37 PM (16 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ticket #3575
- Property Triage Stage Unreviewed → Accepted
- Property Cc added
- Property Patch needs improvement set
- Property Needs tests set
- Property Owner changed from to
- Property Summary [patch] iexact searches should use LOWER() not ILIKE → postgres backend should optimize iexact searches
-
Ticket #3575 – Description
initial v21 1 Currently queries using field__iexact="blah" translate to field ILIKE 'blah'. This is really inefficient because ILIKE queries (since they are for pattern matching) cannot be indexed and the whole table must be scanned. If LOWER(field) = LOWER('blah')is used, it accomplishes the same thing, but an index can be created for LOWER(field) that eliminates the table scan.1 Currently queries using {{{field__iexact="blah"}}} translate to {{{field ILIKE 'blah'}}}. This is really inefficient because ILIKE queries (since they are for pattern matching) cannot be indexed and the whole table must be scanned. If {{{LOWER(field) = LOWER('blah')}}} is used, it accomplishes the same thing, but an index can be created for LOWER(field) that eliminates the table scan. 2 2 3 3 This is a little tricky since the default substitution is only on the operator and the right operand, but this patch adds a column substitution array as well. This patch should probably be applied across all backends where LOWER() is supported. Currently it only changes the postgresql_psycopg2 backend.