Indexes are the best way to improve performance in SQL Database application. Without indexes, SQL Server engine is considered as a reader to find a word in book by examining every page. Using index in back of book, a reader can complete the entire task in very short time. In the database terms, table scan takes place when there is no index to help a particulal query. The table scan SQL Server analyses every row in table to satisfy a query result. At certain time, table scan is unavoidable, but on huge tables, scan has a great impact on performance. Besides, the most important jobs for database is to find the best index when generating the execution plan. Many ship database tool to show the execution plan for a query that helps in optimizing or tuning indexes. Therefore, in this blog, we will discuss several rules to apply when modifying and creating indexes for database. Before that, let us explain some contexts where indexes improve performance in SQL server.
Useful SQL Index Queries
Likewise the reader start searching for a word in book, the indexing helps when users are looking for a record or set of records with WHERE clause. This contains a range of values, queries designed to match a particular value, and queries performing join on two tables. For an instance, both queries against Northwind database below will benefit of indexes on TestDB column.
As long as index entry can be stored in sorted order, an index helps when dealing with ORDER BY clauses. Without an index in database has to load each record and sort them during the execution. The indexes on TestDB will permit a database to execute the following query by scanning an index and fetching multiple rows as they are mentioned. To sort records in descending order, the database can directly scan an index in reverse.
Grouping records with the help of GROUP BY clause that requires sorting, so TestDB index will also help the below query to count the total number of products at every price.By retrieving records in the sorted order through TestDB index, the database verify the price match that appear in consecutive index entries, and also keeps all products at a fair price. An Index is important for maintaining the unique values in a particular column, whereas the database can search indexes to check if the incoming value already exists. The Primary key is always indexed due to this reason.
Disadvantages of SQL Indexes
Index is like a performance drag when time comes to change all records. At any time the SQL query modifies data in table indexes. Achieving a variety of indexes will require testing and monitoring of database to check where the best balance lying down. The static systems, where databases will be used for reporting, affords more indexes to support read only query. A database with numerous transactions to change data will need a small number of indexes to allow for higher throughput. The index also uses disk space. The exact size depends on total number of records available in table or number and size of columns in an index. In most cases, it is not a major concern as storage space easy and simple to trade for better performance.
Creation of Best Indexes in SQL Server
There are many guidelines to build the useful database indexes for your application. You can choose the data values under the columns, consider the below points when select indexes for each table.
Short index is useful for two different reasons. First of all, database work is basically disk intensive. A large index key may cause database to perform disk reads, which limits the throughput. Another reason, the index entries are usually involved in comparisons, smaller entry gets easier to compare. The single integer column, which makes the best index key because the integer is small for database to compare. On the other hand, the character strings will require character by character comparison and also notice the collation settings.
The most effective index is an index with a small bit of duplicated values. As in comparison, look at the phone book where everyone has a last name XYZ. A phone book is not very beneficial if sorted in by last name, because you can only deduct small records when you are finding XYZ. Indexes with high percentage of unique values is becoming a selective index. Undoubtedly, the unique index is greatly selective yet there are no duplicate entries. Most of the databases can track statistics about every index so they know how selective every index is. A database may use these statistics when creating the execution plan for a query.
SQL Covering Queries
Generally, indexes will contain only the data values for columns they index and pointer back to the specific row with rest of the data. Similarly to an index in a book: the index involves only some keywords and page reference that you can turn for rest of data information. Basically the database must have to follow pointers from index back to row to collect all the necessary information for a query. Although, if an index contains all columns for a query, the database can store disk read by not returning to table.
Take indexes on TestDB that we discussed earlier. A database can only use the index entries to assure the following query.
After considering all queries, all columns requested in output are covered by a separate index. For the important queries, you may consider building a covering index for best performance. Probably, the index would be a composite index that seems to go against first guideline to keep all index entries as less as possible. Of course, this is another tradeoff so that you can easily evaluate with monitoring and testing performance.
Clustered Indexes in SQL
Most of the databases have special index per table where each data from a particular row exists in an index. SQL Server indicates this index a clustered index. Rather than index at the back of a particular book, the clustered index is closer to phone book because an index entry involves all information that you need, there is no reference to pick up some additional data values.
Generally, every non-trivial table must have a clustered index. If you create a single index for table, then make an index a clustered index. In Microsoft SQL Server, generating a primary key will automatically create the clustered index using primary key column as an index key. Clustered index is the most effective index and in various database systems will help a database to manage the space needed to store a table.
When selecting the column or few columns for clustered index, make sure that you will select a column with the static data. If you need to change the records and values of a column in clustered index, the database can move the index entry. Surely, index entries for clustered index that contain all column values, thus moving all entries are comparable to perform DELETE statement followed by INSERT, which might cause performance issues if done often. Due to this reason, clustered indexes are found in primary as well as foreign key columns. Key values are not often, if ever, change.
In this write-up, we have discussed all possible scenarios to improve index performance in SQL Server. Also, we have covered some guidelines to build the best indexes for application in a detailed manner. Make sure that you can follow every instruction very carefully.