In fact, I'd go so far as to say that the practice of selecting all columns makes it practically impossible to make use of covering indexes for high impact queries.
In fact, I'd go so far as to say that the practice of selecting all columns makes it practically impossible to make use of covering indexes for high impact queries.
Clearly, this type of index is both expensive to maintain, and the benefits are lessened if you include every column in a table in the covering index. So, to actually have real benefits, you need to have carefully crafted queries which only select what they need, and these being matched to carefully crafted covering indexes. Basically, you cannot have these - which are one of the better weapons you have for performance - if you always select everything.
Otherwise it does not matter how many columns you select, because you will have to read all the columns for every row anyway.
It does matter. An index can actually contain a cache of values for some columns. This is done with INCLUDE statement.
CREATE INDEX idx
ON book ( author_id )
INCLUDE ( book_title )
This select will use only index: select author_id, book_title
from books
where author_id = 123
This select will use index, and then have to follow and fetch data out of rows: select *
from books
where author_id = 123
https://use-the-index-luke.com/blog/2019-04/include-columns-...The way I read the article, it seems to suggest that by removing rows from the select list would somehow always result in better performance. In my opinion, in the majority of cases there will be no measurable impact on performance.
In some specific cases, however, yes, it can make a big difference. In postgres it also seems like selecting all columns explicitly, but out of order can be detrimental to performance:
https://www.postgresql.org/message-id/5562FE06.9030903@lab.n...
So, it depends :)
Selecting only the columns you need just prevents the database from having to go back to the clustered index to retrieve the remaining information that wasn't included on the index.
Selecting * from a table has no impact on the indexes used. But it can be expensive to need to go back to the clustered index to get the additional information.