OK Guys. I'm fed up of the query below taking too much time. I CANT
change the query since it is generated by a 3rd party product. I can
change indexes and add new indexes though.
The schema of the tables is given below. The most expensive operation
is a bookmark lookup on VGNCCB_ROLE_JT. I created the speed_up_login
index as a covering index to cover the
query but that has not seemed to help.
Any ideas, suggestions are most welcome ....
select
ROLE_ID,
NAME,
DESCRIPTION,
CREATE_DATE,
MODIFIED_DATE
FROM
vign.VGNCCB_ROL E
WHERE
ROLE_ID in (select ROLE_ID
FROM
vign.VGNCCB_ROL E_JT
WHERE
USER_NAME = 'XXXX' or GROUP_ID in (select GROUP_ID
FROM
vign.VGNCCB_GRO UP_USER_JT
WHERE
USER_NAME = 'XXXX) )
*************** *************** *************** *************** **
VGNCCB_ROLE_JT
Column_name Type
ID int
ROLE_ID int
USER_NAME nvarchar
GROUP_ID int
PK__VGNCCB_ROLE _JT__218BE82B clustered, unique, primary key located on
PRIMARY ID
speed_up_login nonclustered located on PRIMARY USER_NAME, GROUP_ID,
ROLE_ID
VGNCCB_ROLE_JT_ INDEX1 nonclustered located on PRIMARY USER_NAME
VGNCCB_ROLE_JT_ INDEX2 nonclustered located on PRIMARY GROUP_ID
*************** *************** *************** *************** ***
VGNCCB_GROUP_US ER_JT
Column_name Type Computed Length Prec Scale Nullable TrimTrailingBla nks FixedLenNullInS ource Collation
ID int
GROUP_ID int
USER_NAME nvarchar
PK__VGNCCB_GROU P_USE__1DBB5747 clustered, unique, primary key located
on PRIMARY ID
VGNCCB_GROUP_US ER_JT_INDEX1 nonclustered located on PRIMARY GROUP_ID
VGNCCB_GROUP_US ER_JT_INDEX2 nonclustered located on PRIMARY USER_NAME
*************** *************** *************** *************** ******* 3 1802
Jack A (In**********@y ahoo.com) writes: OK Guys. I'm fed up of the query below taking too much time. I CANT change the query since it is generated by a 3rd party product. I can change indexes and add new indexes though. The schema of the tables is given below. The most expensive operation is a bookmark lookup on VGNCCB_ROLE_JT. I created the speed_up_login index as a covering index to cover the query but that has not seemed to help.
One idea is to try whether you can make:
(select ROLE_ID FROM vign.VGNCCB_ROL E_JT WHERE USER_NAME = 'XXXX' or GROUP_ID in (select GROUP_ID FROM vign.VGNCCB_GRO UP_USER_JT WHERE USER_NAME = 'XXXX) )
into an indexed view, and hope that the optimizer picks it up. But there
are plenty of restrictions on indexed views, so if you create a view,
it may not be indexable. And even if you can, there is no guarantee that
the optimizer will use the view.
PK__VGNCCB_ROLE _JT__218BE82B clustered, unique, primary key located on PRIMARY ID speed_up_login nonclustered located on PRIMARY USER_NAME, GROUP_ID, ROLE_ID VGNCCB_ROLE_JT_ INDEX1 nonclustered located on PRIMARY USER_NAME VGNCCB_ROLE_JT_ INDEX2 nonclustered located on PRIMARY GROUP_ID
It seems meaningless to have the clustered index on ID. I would change
the primary key into non-clustered. Then I would try a clustered
index on ROLE_ID and keep the non-clustered indexes on USER_NAME
and GROUP_ID, hoping that the optimizer will use index intersection
on the two covering indexes. (With ROLE_ID as clustered, it will be
part of the non-clustered indexes too.
--
Erland Sommarskog, SQL Server MVP, es****@sommarsk og.se
Books Online for SQL Server SP3 at http://www.microsoft.com/sql/techinf...2000/books.asp
Erland Sommarskog <es****@sommars kog.se> wrote in message news:<Xn******* **************@ 127.0.0.1>... Jack A (In**********@y ahoo.com) writes: OK Guys. I'm fed up of the query below taking too much time. I CANT change the query since it is generated by a 3rd party product. I can change indexes and add new indexes though. The schema of the tables is given below. The most expensive operation is a bookmark lookup on VGNCCB_ROLE_JT. I created the speed_up_login index as a covering index to cover the query but that has not seemed to help.
One idea is to try whether you can make:
(select ROLE_ID FROM vign.VGNCCB_ROL E_JT WHERE USER_NAME = 'XXXX' or GROUP_ID in (select GROUP_ID FROM vign.VGNCCB_GRO UP_USER_JT WHERE USER_NAME = 'XXXX) )
into an indexed view, and hope that the optimizer picks it up. But there are plenty of restrictions on indexed views, so if you create a view, it may not be indexable. And even if you can, there is no guarantee that the optimizer will use the view.
PK__VGNCCB_ROLE _JT__218BE82B clustered, unique, primary key located on PRIMARY ID speed_up_login nonclustered located on PRIMARY USER_NAME, GROUP_ID, ROLE_ID VGNCCB_ROLE_JT_ INDEX1 nonclustered located on PRIMARY USER_NAME VGNCCB_ROLE_JT_ INDEX2 nonclustered located on PRIMARY GROUP_ID
It seems meaningless to have the clustered index on ID. I would change the primary key into non-clustered. Then I would try a clustered index on ROLE_ID and keep the non-clustered indexes on USER_NAME and GROUP_ID, hoping that the optimizer will use index intersection on the two covering indexes. (With ROLE_ID as clustered, it will be part of the non-clustered indexes too.
I quite agree with Erland about making the ID column NON-clustered,
and then using your clustered index on something more suitable.
Just for reference, though, your covered index doesn't cover the query
(if it did, you wouldn't still be seeing bookmark lookups). You
haven't included any of the columns in the SELECT clause in the index,
so it still needs to go back to the main table to get these (a truly
covered index doesn't need to go to the main table at all). However,
if you do this, your index will be about the same size as your table -
not great. Erland's suggestion of re-arranging the clustered index
onto a better column would seem to be the best.
Philip Yale (ph********@bto penworld.com) writes: Just for reference, though, your covered index doesn't cover the query (if it did, you wouldn't still be seeing bookmark lookups). You haven't included any of the columns in the SELECT clause in the index,
Jack's speed_up_login index on VGNCCB_ROLE_JT is covering. I think you are
mixing up the tables.
However, since the index also includes ID, it is a variation of the
clustered index. And since there are conditions of two of the values,
the best SQL Server could do is to scan that index. And since did
not scan the table prior to adding index, there is on reason why it should
start to scan an index which is equal to the table. So speed_up_login is
probably not used.
--
Erland Sommarskog, SQL Server MVP, es****@sommarsk og.se
Books Online for SQL Server SP3 at http://www.microsoft.com/sql/techinf...2000/books.asp This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Wouter |
last post by:
Hi,
I was wandering.
Does the query speed also depend on the colums that you don't use in the
query (so not in the where and not in the select part).
I have a lange unused backup field in every row.
I only put the backup information into that field once.
But never use it on my live database.
|
by: Chris Foster |
last post by:
I am trying to implement a very fast queue using SQL Server.
The queue table will contain tens of millions of records.
The problem I have is the more records completed, the the slower it
gets. I don't want to remove data from the queue because I use the
same table to store results. The queue handles concurrent requests.
The status field will contain the following values:
0 = Waiting
|
by: Bruce D |
last post by:
Here's the breakdown:
MySQL 4.0.12
Table: Assignment (indexes are created on proper fields) 419,234 records
Table: Finders (indexes are created on proper fields) 5,345,657 records
My user wants to be able to do a wild card search on lastname in the finders
table. So, I wrote the following query.
SELECT Finders.Lastname, Assignment.currentcard
FROM Finders JOIN Assignment on Finders.assignmentid=Assignment.assignmentid
WHERE...
|
by: Sebastian |
last post by:
The following query needs about 2 minutes to complete (finding dupes)
on a table of about 10000 addresses. Does anyone have an idea on how
to speed this up ?
Thanks in advance !!!
Sebastian
|
by: Patric |
last post by:
Hi
I'm having some problem getting the following result.
I have 2 tables
Drivers
--------
DriverID int (PK)
DriverName varchar(50)
| |
by: JENS CONSER |
last post by:
Hello NG,
We have a performance problem in using a client
server solution based on MS SQL-Server 2000 through
a VPN tunnel (via broadband internet connection).
The SQL Server is running on a Windows 2003 Server
which is configured as VPN server as well.
We figured out that not the performance
|
by: lawrence k |
last post by:
The following function is way too slow. If anyone has any suggestions
about how to speed it up, I'd be grateful for them. We have to call
this function 36 times on one page, and I think each time it takes half
a second, so it adds up to maybe 18 seconds, which is a lot when you're
showing software to a client. The reponse we get is "Why is it so
slow?"
<?php
|
by: hooked888 |
last post by:
Hi,
I have a database and a query both 100% (with specific index) identical and install and run in my laptop and server but resulting slightly different time frame to complete.
Run a query in my laptop 1GB RAM, INTEL 1.66GHz Core 2 took me 1 minute 38 seconds.
Run the same query in server 4GB RAM, ZEON 3.0GHz took me 1 minute 36 seconds.
Both using MS SQL 2000, windows server 2003.
|
by: SaltyBoat |
last post by:
Needing to import and parse data from a large PDF file into an Access
2002 table: I start by converted the PDF file to a html file. Then
I read this html text file, line by line, into a table using a code
loop and an INSERT INTO query. About 800,000 records of raw text.
Later, I can then loop through and parse these 800,000 strings into
usable data using more code.
The problem I have is that the conversion of the text file, using a...
|
by: nitinpatel1117 |
last post by:
Hi
I have a mysql query which seems to execute slowly.
I was wondering if there was a way to speed it up a bit.
the query is;
select count(*) as emailCount from mailing_list where user like 'joel@bloggs.com' and list_id = '47'
this table has a primary key called 'email_id'
so I was wondering if
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
| |
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |