Solved

Better/Quicker Way to Join on LIKE in SQL Server?

Posted on 2015-02-20
3
76 Views
Last Modified: 2015-03-03
Hello,

I have two sets of data I'm trying to join, but the query is so slow it times out even with very small sections of the data.

The first set of data is an email address and a comma-separated list of categories.

Email_Address	Customer_Categories
bob1@bob.com	592,593
bob2@bob.com	592,593,597
bob3@bob.com	602

Open in new window


The second set of data is a list of SKUs which have one category ID associated with them on each row:

productcode	categoryid
2036814		592
2102602		593
2031181		597
2031212		597
2102602		599
2102602		602
2102602		608
2102602		610
2102602		611

Open in new window


I've tried to create join the two result sets on a LIKE condition

SELECT
	CustomerTable.EmailAddress, 
	ProductTable.ProductCode
FROM 
	(SELECT EmailAddress, Customer_Categories FROM Customers) AS CustomerTable
JOIN 
	(SELECT ProductCode, CategoryID FROM Products) AS ProductTable
ON
	CustomerTable.Customer_Categories LIKE ProductTable.CategoryID

Open in new window


but either there's too much data, the query is too slow, or both. Is there a better or more efficient way to do this sort of query in SQL Server?
0
Comment
Question by:vacpartswarehouse
[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
3 Comments
 
LVL 33

Accepted Solution

by:
ste5an earned 500 total points
ID: 40622434
Sure is there a quicker solution: normalize your data. That's what gives you the best performance.

You need a split function when you want to do it inline, e.g. like here.
0
 
LVL 47

Expert Comment

by:Dale Fye (Access MVP)
ID: 40623025
Have to agree with ste5an.  Your CustomerCategories column is not normalized and the Like argument in your SQL will take forever with large datasets.  Your customer Categories table should look like:

CustomerID    CategoryID
1                            592
1                            593
2                            592
2                            593
2                            597
3                            602

and you should have a Customers table which contains the CustomerID and email address, along with other customer specific fields.
0
 
LVL 49

Expert Comment

by:Vitor Montalvão
ID: 40625308
Can't understand why do you have 2 sub-queries. You can use a single query for that:
SELECT
	Customers.EmailAddress, 
	Products.ProductCode
FROM Customers, Products 
WHERE Customers.Customer_Categories LIKE Products.CategoryID

Open in new window

0

Featured Post

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
SqlServer Table Triggers 3 28
SQL eating up memory? 16 39
SQL Server Compression Decision 5 43
SQL profiler 3 12
Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed

756 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