Database Research & Development

  • Home
  • NoSQL
    • NoSQL
    • Cassandra
  • Databases
    • Database Theory
    • Database Designing
    • SQL Server Coding Standards
    • SQL Server
    • PostgreSQL
    • MySQL
    • Greenplum
    • Linux
  • Interviews
    • SQL Server Interviews
    • MySQL Interviews
    • SQL Puzzles
  • DBA Scripts
    • SQL Server DBA Scripts
    • PostgreSQL DBA Scripts
    • MySQL DBA Scripts
    • Greenplum DBA Scripts
  • Home
  • Blog Archives !
  • (: Laugh@dbrnd :)
  • Contact Me !
sqlserverinterviews
Home 2017 December PostgreSQL: Create Index using ORDER BY (ASC/DESC)

PostgreSQL: Create Index using ORDER BY (ASC/DESC)

This article is half-done without your Comment! *** Please share your thoughts via Comment ***

Recently, I received a message like “ORDER BY clause is not working in PostgreSQL Index”.

One of the users created an index with ORDER BY DESC and whenever he was selecting data at that time Query optimizer was not using INDEX SCAN ONLY.

So here, I demonstrate and validate this:

If we know in which order we are going to SELECT data, we should apply for proper ORDER BY ASC/DESC in the index.

Please check the below full demonstration, and then validate your self:

Create a table with sample records:

1
2
3
4
CREATE TABLE tbl_testIndex(a INTEGER, b INTEGER);
 
INSERT INTO tbl_testIndex
SELECT x, x FROM generate_series(1, 5000) AS f(x);

Create a sample index without any ORDER BY:

1
CREATE INDEX tbl_testIndex_idx ON tbl_testIndex (a, b);

Check the execution plan:
Index only scan is working…

1
2
3
4
5
6
7
EXPLAIN
SELECT *FROM tbl_testIndex
ORDER BY a,b;
 
'Index Only Scan using
tbl_testindex_idx on tbl_testindex
(cost=0.28..194.16 rows=5000 width=8)'

Check the below execution plan:
Sequential Scan of the index which is not good.
Because the index is not available for ORDER BY b DESC.

1
2
3
4
5
6
7
8
EXPLAIN
SELECT *FROM tbl_testIndex
ORDER BY a,b DESC;
 
'Sort (cost=380.19..392.69 rows=5000 width=8)'
' Sort Key: a, b DESC'
' -> Seq Scan on tbl_testindex
(cost=0.00..73.00 rows=5000 width=8)'

Now, drop the old index:

1
DROP INDEX tbl_testIndex_idx;

Create a new index with b DESC:

1
CREATE INDEX tbl_testIndex_idx ON tbl_testIndex (a, b DESC);

Check the below execution plan:
Index scan is working…

1
2
3
4
5
6
7
EXPLAIN
SELECT *FROM tbl_testIndex
ORDER BY a,b DESC;
 
'Index Only Scan using
tbl_testindex_idx on tbl_testindex
(cost=0.28..194.16 rows=5000 width=8)'

Check the below execution plans:
You can find sequential scan of index because we are not using only ORDER BY b DESC

1
2
3
4
5
6
7
8
9
10
11
12
EXPLAIN
SELECT *FROM tbl_testIndex
ORDER BY a,b;
 
EXPLAIN
SELECT *FROM tbl_testIndex
ORDER BY a DESC,b DESC;
 
'Sort (cost=380.19..392.69 rows=5000 width=8)'
' Sort Key: a DESC, b DESC'
' -> Seq Scan on tbl_testindex
(cost=0.00..73.00 rows=5000 width=8)'

Now, check the below execution plan:
You can find like Index scan backward, where we gave ORDER By a DESC and internally, it is using backward index scan.

1
2
3
4
5
6
7
EXPLAIN
SELECT *FROM tbl_testIndex
ORDER BY a DESC,b;
 
'Index Only Scan Backward using
tbl_testindex_idx on tbl_testindex
(cost=0.28..194.16 rows=5000 width=8)'

Dec 16, 2017Anvesh Patel
PostgreSQL: Set Application Name for each Session and ConnectionPostgreSQL: Allow single NULL for UNIQUE Constraint Column

Leave a Reply Cancel reply

CAPTCHA
Refresh

*

Anvesh Patel
Anvesh Patel

Database Engineer

December 16, 2017 PostgreSQLAnvesh Patel, database, database research and development, dbrnd, index, index order by, Optimization, plpgsql, Postgres Query, postgresql, PostgreSQL Administrator, PostgreSQL Error, PostgreSQL Monitoring, PostgreSQL Performance Tuning, PostgreSQL Programming, PostgreSQL Tips and Tricks
About Me!

I'm Anvesh Patel, a Database Engineer certified by Oracle and IBM. I'm working as a Database Architect, Database Optimizer, Database Administrator, Database Developer. Providing the best articles and solutions for different problems in the best manner through my blogs is my passion. I have more than six years of experience with various RDBMS products like MSSQL Server, PostgreSQL, MySQL, Greenplum and currently learning and doing research on BIGData and NoSQL technology. -- Hyderabad, India.

About DBRND !

dbrnd

This is a personal blog (www.dbrnd.com).

Any views or opinions represented in this blog are personal and belong solely to the blog owner and do not represent those of people, institutions or organizations that the owner may or may not be associated with in professional or personal capacity, unless explicitly stated.

Feel free to challenge me, disagree with me, or tell me I’m completely nuts in the comments section of each blog entry, but I reserve the right to delete any comment for any reason whatsoever (abusive, profane, rude, or anonymous comments) - so keep it polite.

The content of this website is protected by copyright. No portion of this website may be copied or replicated in any form without the written consent of the website owner.

Recent Comments !
  • Anvesh Patel { Sure will do... } – May 27, 12:43 PM
  • Anvesh Patel { Great... } – May 27, 12:41 PM
  • Anvesh Patel { Great... } – May 27, 12:39 PM
  • Anvesh Patel { Great... } – May 27, 12:36 PM
  • Anvesh Patel { Great... } – May 27, 12:28 PM
  • Anvesh Patel { Great... } – May 27, 12:27 PM
  • Anvesh Patel { Great... } – May 27, 12:16 PM
  • Older »
Follow Me !
  • facebook
  • linkedin
  • twitter
  • youtube
  • google
  • flickr
© 2015 – 2019 All rights reserved. Database Research & Development (dbrnd.com)
Posting....