Ik ben een adresboek aan het maken dat moet zoeken op de voornaam en achternaam. Hiervoor maak ik een OR statement in SQL. Dit doe ik als er niets in de voornaam gevonden is met de waarde dan kan hij in de achternaam kijken.
Maar dit duurt veelste lang als hij in beide tabellen moet kijken, de database is erg groot en heeft ong 200. 000 records.
Weet iemand hoe ik sneller dit kan opvragen in SQL?
SELECT r.VendId,r.Name,r.JobDescription,r.FirstName,r.Initials,r.OfficePhone,r.PrivCountryCode,
r.MobilePhone,r.PrivAddr,r.Email ,a.Name,a.Addr,a.PostCode,a.State,a.City
FROM T_VendorRelation r,t_vendoraddress a
WHERE r.FirstName LIKE '%$voornaam%'
OR LastName Like $voornaam
AND a.VendId = r.VendId";
1. 200000 records is niet erg groot, het is zelfs gewoon niet groot.
2. kijk even naar http://dev.mysq...dexes.html , daar geven ze wat uitleg over indexen, hiermee zou je een heel pak verder moeten komen.
SELECT * FROM T_VendorRelation r
INNER JOIN t_vendoraddress a
ON a.VendId = r.VendId
WHERE r.FirstName LIKE '%$voornaam%'
OR LastName LIKE $voornaam AND a.VendId = r.VendId
SELECT*FROM T_VendorRelation r
INNERJOIN t_vendoraddress a
ON a.VendId = r.VendId
WHERE r.FirstName LIKE'%$voornaam%'
OR LastName LIKE $voornaam AND a.VendId = r.VendId
Volgens mij is een join ook de betere oplossing. Volgens http://www.mysq...-and-where/ zijn de execution plans van beide opties echter hetzelfde in mysql en is er dus geen performance winst
@Joel Dankjewel, De inner join werkt sneller?
Ik ben heeel nieuwschierig hoe het komt dat het sneller is ???
want hij doet toch gewoon hetzelfde als mijn eerste query?
$statement ="SELECT r.VendId,r.Name,r.JobDescription,r.FirstName,r.Initials,r.OfficePhone,r.PrivCountryCode,r.MobilePhone,r.PrivAddr,r.Email ,a.Name,a.Addr,a.PostCode,a.State,a.City
FROM T_VendorRelation r INNER JOIN t_vendoraddress a ON a.VendId = r.VendId WHERE r.FirstName LIKE '%$voornaam%' OR r.Name LIKE '%$voornaam%' AND a.VendId = r.VendId";
FROM T_VendorRelation r INNER JOIN t_vendoraddress a ON a.VendId = r.VendId WHERE r.FirstName LIKE '%$voornaam%' OR r.Name LIKE '%$voornaam%' AND a.VendId = r.VendId";
@Joel Dankjewel, De inner join werkt sneller?
Ik ben heeel nieuwschierig hoe het komt dat het sneller is ???
want hij doet toch gewoon hetzelfde als mijn eerste query?
dit is de juiste statement [..code..]
met een WHERE filter je de data pas als hij opgehaald is ... bij een inner join direct. (geen overbodige data).