Solved

create index to c1, c2 and c3

Posted on 2016-08-18
9
91 Views
Last Modified: 2016-08-22
hi have this dinamic query

depending on the parameters selected the query could be
--query 1
select .. from .. where c1=1

--query 2
select .. from .. where c1=1 and c2='lop'

--query 3
select .. from .. where c1=1 and c3=10

--query 4
select .. from .. where c2='pol' and c3=90

as I create the index? to column c1, c2 and c3
0
Comment
Question by:enrique_aeo
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
9 Comments
 
LVL 52

Expert Comment

by:Ryan Chong
ID: 41761898
is that your question asking whether or not should we create the indexes for column c1, c2 and c3?

if this is the question, then the answer probably is yes. you can do that.

or if this is not the question you asking for, pls elaborate further for your question.
0
 
LVL 29

Accepted Solution

by:
Pawan Kumar earned 250 total points
ID: 41761964
Well in this case you will have to create NON Clustered Index on all the three columns as you are searching at least on 2 parameters.

You can also create combination of 2 - 2 Nonclustered indexes but too many indexes will hamper the performance of the system.

Also, When you write this of kind query consider parameter sniffing in mind. Always use below approach.


IF @CustomerID IS NOT NULL
BEGIN
 SELECT @spexecutesqlStr = @spexecutesqlStr
 + N' AND [C].[CustomerID] = @CustID';
 SELECT @ExecStr = @ExecStr
 + N' AND [C].[CustomerID] = CONVERT(BIGINT, ' + CONVERT(NVARCHAR(30),@CustomerID) + N')';
END

http://www.sqlskills.com/blogs/kimberly/high-performance-procedures/

Enjoy !

Pawan Kumar Khowal
0
 
LVL 143

Assisted Solution

by:Guy Hengel [angelIII / a3]
Guy Hengel [angelIII / a3] earned 125 total points
ID: 41762042
queries 1,2 and 3 may all 3 profit from an index on c1, but it mainly depends on the cardinality of the values of c1 if it's really profitable.

from what you wrote, c1 actually does not "look" like a good candidate, so I would create (at least9 the following indexes:
index1: C3  + C2
index2: C1  + C2
that will support with a minimal number of indexes most cases.

note: the order of the fields in the index is important!
0
Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

 
LVL 51

Assisted Solution

by:Vitor Montalvão
Vitor Montalvão earned 125 total points
ID: 41762125
Since your query is very dynamic I would create 3 indexes, each one for each field.
So:
Index on C1
Index on C2
Index on C3

NOTE: By your sample C1 might be a bit field? If so, then don't create any index for C1 but for C2 and C3 only.
0
 
LVL 69

Expert Comment

by:Scott Pletcher
ID: 41762686
In general terms:

What percentage of the time do you query on c1?  If you query on c1 most of the time, then cluster the table first on c1, assuming it is at all reasonably selective.

If you do that, then you can create a nonclustered index on:
(c2, c3) or
(c3, c2)
Index first on whichever one you search on most often.

Of course to be sure about clustering you'd need to look at index stats, including index missing, index usage and index operational stats.
0
 

Author Comment

by:enrique_aeo
ID: 41763968
c1, c2 and c3 are nonclustered index

the user enters the search parameters from webform.
The parameter are: firstname, lastname, nationalidnumber are varchar
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 41764104
what then is c1, c2 and c3?
0
 

Author Comment

by:enrique_aeo
ID: 41765878
c1= firstname
c2= lastname
c3= nationalidnumber
0
 

Author Closing Comment

by:enrique_aeo
ID: 41765982
ok
0

Featured Post

 Watch the Recording: Learning MySQL 5.7

MySQL 5.7 has a lot of new features. If you've dabbled with an older version of MySQL, it is definitely worth learning.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Ever wondered why sometimes your SQL Server is slow or unresponsive with connections spiking up but by the time you go in, all is well? The following article will show you how to install and configure a SQL job that will send you email alerts includ…
It is possible to export the data of a SQL Table in SSMS and generate INSERT statements. It's neatly tucked away in the generate scripts option of a database.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function
Viewers will learn how to use the SELECT statement in SQL to return specific rows and columns, with various degrees of sorting and limits in place.

623 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question