?
Solved

Strange SQL view, where clause, COALESCE perfomance issue

Posted on 2014-12-18
7
Medium Priority
?
143 Views
Last Modified: 2014-12-28
I have a weird sql issue.
I don't have control over these SQL statements.  They are created and executed (behind the scenes) by an application (Sage CRM).
So please don't ask me to change the SQL statement because I can't and the product manufacturer (Sage CRM) says the issue is with my sql server...

The only reason I know what the sql statement looks like is because it times out and an error gets written to a log file.

This SQL statement takes 4 minutes to return 792 records -

SELECT * FROM z_vmailinglistreport WHERE
(( COALESCE(comp_type, '') = N'rescontractor' ) )
AND ((pers_secterr = -2034921070))
AND coalesce(pers_cstatus,'') = 'Active'

If I use the SELECT statement from the view and add the WHERE clause it runs in 1 second.

If I remove either one of COALESCE functions it runs in 1 second.

Any ideas?

Thanks,

Kevin.
0
Comment
Question by:kevinvw1
[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
  • 2
  • 2
  • 2
  • +1
7 Comments
 
LVL 69

Accepted Solution

by:
Scott Pletcher earned 2000 total points
ID: 40507893
The COALESCE (or any other function) used on a column will prevent SQL from doing an index seek for that column.  Thus, even if the tables are perfectly indexed for the query, SQL won't be able to take advantage of it.

The only way to get the best performance out of such queries is remove the unnecessary COALESCE (NULL will never be =, <>, < or > any value anyway, so converting null to '' isn't needed):

WHERE
 ( comp_type = N'rescontractor'  )
 AND ((pers_secterr = -2034921070))
 AND pers_cstatus = 'Active'
0
 

Author Comment

by:kevinvw1
ID: 40507935
Thanks for the info.  

Any idea why the query runs almost instantly when I take the select statement from the underlying view and add the where clause to it (with the COALESCE) ?

Or if I add the where clause to the view it runs instantly as well.

Thanks, Kevin.
0
 
LVL 69

Expert Comment

by:Scott Pletcher
ID: 40507950
No, unless there are other WHERE conditions or JOINs in the view itself.
0
Not sure which OpenStack Certification to get?

So you’ve realized you might want to get certified in OpenStack, but you’re not sure what the benefits might be or even which one you should take. You know there are several certification courses you can choose from, but how do you know which one is right for you?

 
LVL 25

Expert Comment

by:chaau
ID: 40508205
You need to create a function based index. But there is a catch, SQL Server does not support it natively like it is in Oracle or Postgresql. There is a workaround. Create two computed column. Here is an example for one, comp_type:
ALTER TABLE z_vmailinglistreport ADD COMPUTED_comp_type AS COALESCE(comp_type, '');
-- And then create an index on the computed column:
CREATE INDEX ix_z_vmailinglistreport_COMPUTED_comp_type ON [z_vmailinglistreport](COMPUTED_comp_type);

Open in new window

BTW, tell the software vendors to stop using non-sargable queries and stop blaming you
0
 
LVL 25

Expert Comment

by:Lee Savidge
ID: 40512805
Which version and patch level of Sage CRM is this?
0
 

Author Comment

by:kevinvw1
ID: 40513359
Hi Lee, it is 7.2e

Just to clarify, the issue happens even when just running the query in SQL Server Management Studio.
So unless Sage changes the way they use the COALESCE feature I may be stuck.

I actually changed the view around to pre-filter the on pers_cstatus = "Active".
This took that criteria out of the report and resolved the issue for now.

But I'm still curious about why the view and where clause behave the way they are behaving.

Thanks,

Kevin.
0
 
LVL 25

Expert Comment

by:Lee Savidge
ID: 40513373
Believe me I know all about Sage using the coalesce function. It's caused me no end of problems in other areas of CRM. I'm guessing this is a report and the fields that CRM is having issues with are the search criteria fields in the report builder.

Are you allowing the users to choose their own values for the search criteria or are they fixed?
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

In this article we will learn how to fix  “Cannot install SQL Server 2014 Service Pack 2: Unable to install windows installer msi file” error ?
In the first part of this tutorial we will cover the prerequisites for installing SQL Server vNext on Linux.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Viewers will learn how to use the SELECT statement in SQL and will be exposed to the many uses the SELECT statement has.
Suggested Courses

752 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