Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
SQL

SQL: Use Indexes to Boost Query Performance

- 19.07.26 - ErcanOPAK

⚡ Indexes = Query Performance

Slow queries kill performance. Indexes speed up queries. Find data fast, optimize SELECTs.

📝 Index Types

# B-Tree Index (default)
CREATE INDEX idx_users_email ON users(email);

# Unique Index (enforces uniqueness)
CREATE UNIQUE INDEX idx_users_email ON users(email);

# Composite Index (multiple columns)
CREATE INDEX idx_users_name_email ON users(name, email);

# Full-Text Index (text search)
CREATE FULLTEXT INDEX idx_articles_content ON articles(content);

# Bitmap Index (for low cardinality)
CREATE BITMAP INDEX idx_users_status ON users(status);

# Index on Expression
CREATE INDEX idx_users_upper_name ON users(UPPER(name));

# Clustered vs Non-Clustered
# Clustered: Table sorted by index (one per table)
# Non-Clustered: Separate structure (multiple per table)

🎯 Index Strategies

# When to Index
- WHERE clauses (frequent queries)
- JOIN columns
- ORDER BY columns
- GROUP BY columns

# Covering Indexes
CREATE INDEX idx_users_covering ON users(email)
INCLUDE (name, created_at);

# Filtered Index (partial)
CREATE INDEX idx_users_active ON users(email)
WHERE status = 'active';

# Index with ASC/DESC
CREATE INDEX idx_users_created ON users(created_at DESC);

# Analyze Query Plan
EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';

# Find Missing Indexes
SELECT 
    migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS improvement_measure,
    'CREATE INDEX [missing_index_' + CONVERT(VARCHAR, mig.group_handle) + '_' + CONVERT(VARCHAR, digest.index_handle) + '_' + LEFT(PARSENAME(mid.statement, 1), 32) + '] ON ' + mid.statement + ' (' + ISNULL(mid.equality_columns, '') + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END + ISNULL(mid.inequality_columns, '') + ')' + ISNULL(' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE mid.database_id = DB_ID()
ORDER BY improvement_measure DESC;

# Index Best Practices
- Index columns used in WHERE and JOIN
- Avoid over-indexing (slows INSERT/UPDATE)
- Use composite indexes for multiple columns
- Monitor index usage
- Rebuild indexes periodically

💡 Index Tips

  • Index columns used in WHERE and JOIN
  • Avoid over-indexing (slows INSERT/UPDATE)
  • Use composite indexes for multiple columns
  • Monitor index usage
  • Rebuild indexes periodically

“Indexes make queries fast. Find data instantly. Essential for database performance.”

— DBA

Related posts:

SQL Queries Get Slower as Data Grows

SQL Full-Text Search: Build Google-Like Search in Your Database

SQL Server — LEFT JOIN + WHERE Turns Into INNER JOIN

Post Views: 2

Post navigation

.NET Core: Build Background Tasks with Worker Services
C#: Use Object Initializers for Clean Object Creation

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (624)
  • Add Constraint to SQL Table to ensure email contains @ (590)
  • Average of all values in a column that are not zero in SQL (553)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (526)
  • Find numbers with more than two decimal places in SQL (468)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps
  • Photoshop: Fix a Color Profile Mismatch That Makes Printed Output Look Nothing Like What You Saw On Screen
  • WordPress: Fix Search Results That Return Pages From a Theme You Deactivated Months Ago
  • Visual Studio: Fix a Test Project That Builds Fine Alone but Fails to Discover Any Tests After a NuGet Restore
  • ASP.NET Core: Fix a File Upload That Times Out on Slow Connections Only Because Kestrel’s Minimum Data Rate Feature Kicked In
  • JavaScript: Fix an Array Destructuring Default Value That Silently Never Applies Because null Was Passed Instead of Undefined

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com