The column index is very well explained here: http://www.patrickkeisler.com/2014/04/what-is-non-clustered-columnstore-index.html
The traditional clustered and non-clustered index that you mentioned is the rowstore index, where the database stores the index in a row by row. The index will be distributed across several sections, so even when we select only one column, the database still has to scan all the sections to get the data, therefore, do a lot of I / O.
Index on the other hand
Columnstore stores an index column by column. Usually this will have all the column data stored in one section, since all the data in one column is not so large combined. Now, when we select 1 column from the index, the database can return data from one section, which reduces the number of I / O operations. Moreover, the column index often has a significant degree of compression, so I / O is even more efficient and the entire index can be stored in memory, which allows faster queries from 10x to 100x.
Column index is not always better than rowstore. The Columnstore index is suitable for scenarios such as data warehouse and BI, where data is often processed in bulk, for example, for aggregates. However, it works worse than the rowstore index in scenarios where data is often viewed on separate rows.
It is worth noting that the index of a non-clustered column blocks the modification of your table (but there are some solutions for modifying data), and the clustered columnstore index still allows you to edit data without dropping or disabling the index.
See the article above for more information on this topic, and try reading the MSDN docs.
source share