Skip to main content

Nonclustered Index in SQL Server

So, I've run into an issue with one of my queries because it takes about 40 seconds to run and according to the Recent Expensive Queries section of the Activity Monitor in SQL Server, there is a section of code taking up about 51% of the query. 

First, let me say that I've been writing Transact SQL for quite awhile but have never ventured into the Clustered and NonClustered areas of forming Indexes.  I do use indexes on all my tables but that's just the regular Primary Unique key. 

We've been using this query for awhile and it does work but when the result set is about 5K records it takes a little while to run.  So here's the actual query itself

SELECT 
    PartNo, 
    SerialNo, 
    HeciCode, 
    ScanDate, 
    OrderType, 
    PoNo,  
    po.IssueDate, 
    SoNo 
FROM ScanHistory sh WITH (NOLOCK) 
LEFT OUTER JOIN trkRWPOHeader po WITH (NOLOCK) 
    ON sh.PoNo = po.PONum 
WHERE len(PoNo) > 2 
    AND ScanDate > '1/1/2009' 
    AND PartNo = 'RDH102472' 
    AND sh.SerialNo NOT IN (SELECT SerialNo 
                            FROM ScanHistory WITH (NOLOCK) 
                            WHERE PONo = '' 
                                OR (OrderType = 'SO' AND SoNo = '000001') 
                            ) 
    AND sh.SerialNo NOT IN (SELECT i.SerialNo       
                            FROM skp_SkidItem i with (nolock) 
                            INNER JOIN skp_Skid sk with (nolock) 
                                ON i.SkidNo = sk.SkidNo 
                            WHERE sk.SkidStatus = 'Shipped' 
                                or i.ItemStatus = 'Shipped'
                            ) 
ORDER BY PoNo
When you look at the recommended Execution Plan it says:
Missing Index (Impact 51.4221): CREATE NONCLUSTERED INDEX [<name of missing index, sysname,>] ON dbo.ScanHistory (PartNo, ScanDate)

I have posted this issue on Stack Flow and I have had some responses but nothing really makes sense at this point.  I've tried the above suggestion using a dummy missing index but that didn't seem to work.  Anyhow, if any of you are expert Transact SQL programmers I would love to hear from you on any suggestions or just general explanations on Nonclustered Indexes.

Thanks!



Comments

Popular posts from this blog

2018 Goals Update

Wow, the month of January 2018 has flown by!  I cannot believe it's Feb 1 already!  But I will say I've been pretty happy with the progress of keeping my goals for the 2018 year!

Here's what I've kept to thus far:

1. Recite the Optimist Creed every morning (well at least during work days)

2. No more Mountain Dew in the morning

3. I've learned PHP and in the progress of learning C# and ASP.net (progress is good!)

4.  I'm almost finished reading Soft Skills by John Sonmez (trying to read 1 book per Quarter)

5. Family vacation to Disney has been booked!

6. Blog has been started!

Book Review: The New Psycho-Cybernetics

The book The New Psycho-Cybernetics by Dr. Maxwell Maltz is truly an amazing book!  This book should be read by everyone!  Whether your self-image is good or bad this book talks about taking steps to improve your self-image, live a longer life, and ultimately be happy!

I myself feel like I have a good self-image, my self-esteem is high and overall I'm an optimistic and happy person.  But I can see how a book like this can help me strive for higher achievements and help me to reach those higher goals!

For those with poor self-images and low esteem this book will benefit you immensely.  The book talks about several examples where people have been down, sick, lonely.  But have gone through the exercises in the book and come out with a much better self-image and becoming much more happy.

There are so many examples in the book its hard to cover them all and that's why I will definitely be reading the book again, as well as a reference for future inspirations.  Towards the end of th…

Ways To Avoid Developer's Burnout

Last night I read an article by Adris Azeez called Avoiding Burnout as as Software Developer and it got me thinking about the steps I take to avoid burnout, boredom, etc.

Several of the ideas Adris talks about are very similar to what I already do, but the main point is to change things up, take a break when needed, and if you're not in "coding" mode do something else that's productive.
As a developer for over 20 years I can honestly say there are days where the "ideas" and "code" just doesn't flow.  So here are a few things I do to still be productive at work when I'm developing:
1) Work on a "fun" project: sometimes when you work on the same project for several days/weeks, the brain needs a break.  I find that if I focus on something new it refreshes my mind and the creative juices start flowing again.  For example, I store several "fun" projects in my head to develop in the future.  Recently, I developed a new March …