mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 23:28:02 +00:00
Add Using Expressions In Indexes as a postgres til
This commit is contained in:
@@ -7,7 +7,7 @@ variety of languages and technologies. These are things that don't really
|
|||||||
warrant a full blog post. These are mostly things I learn by pairing with
|
warrant a full blog post. These are mostly things I learn by pairing with
|
||||||
smart people at [Hashrocket](http://hashrocket.com/).
|
smart people at [Hashrocket](http://hashrocket.com/).
|
||||||
|
|
||||||
_396 TILs and counting..._
|
_397 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -237,6 +237,7 @@ _396 TILs and counting..._
|
|||||||
- [Types By Category](postgres/types-by-category.md)
|
- [Types By Category](postgres/types-by-category.md)
|
||||||
- [Use A psqlrc File For Common Settings](postgres/use-a-psqlrc-file-for-common-settings.md)
|
- [Use A psqlrc File For Common Settings](postgres/use-a-psqlrc-file-for-common-settings.md)
|
||||||
- [Use Argument Indexes](postgres/use-argument-indexes.md)
|
- [Use Argument Indexes](postgres/use-argument-indexes.md)
|
||||||
|
- [Using Expressions In Indexes](postgres/using-expressions-in-indexes.md)
|
||||||
- [Using Intervals To Offset Time](postgres/using-intervals-to-offset-time.md)
|
- [Using Intervals To Offset Time](postgres/using-intervals-to-offset-time.md)
|
||||||
- [Who Is The Current User](postgres/who-is-the-current-user.md)
|
- [Who Is The Current User](postgres/who-is-the-current-user.md)
|
||||||
- [Word Count for a Column](postgres/word-count-for-a-column.md)
|
- [Word Count for a Column](postgres/word-count-for-a-column.md)
|
||||||
|
|||||||
31
postgres/using-expressions-in-indexes.md
Normal file
31
postgres/using-expressions-in-indexes.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Using Expressions In Indexes
|
||||||
|
|
||||||
|
Though we usually see column names by themselves when defining an index, it
|
||||||
|
is also possible to create an index with an expression.
|
||||||
|
|
||||||
|
Let's say I have a `users` table with an `email` column. Then I may end up
|
||||||
|
creating an index like this
|
||||||
|
|
||||||
|
```sql
|
||||||
|
create index email_idx on users (email);
|
||||||
|
```
|
||||||
|
|
||||||
|
If I always perform queries on the `email` column with the `lower()`
|
||||||
|
function, like this
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select * from users where lower(email) = lower('some@email.com');
|
||||||
|
```
|
||||||
|
|
||||||
|
then I will want to also create an index with that full expression --
|
||||||
|
`lower(email)`
|
||||||
|
|
||||||
|
I can do this with a statement like the following
|
||||||
|
|
||||||
|
```sql
|
||||||
|
create index lower_email_idx on users (lower(email));
|
||||||
|
```
|
||||||
|
|
||||||
|
Without an index that uses the full `lower(email)` expression, `select`
|
||||||
|
statements like the one above will be forced to do full sequential scans
|
||||||
|
instead of indexed scans.
|
||||||
Reference in New Issue
Block a user