[ASP en MSSQL] Zoekenmachine, query verandert RAAR in MSSQL

Pagina: 1
Acties:

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
Ik ben bezig met een zoekmachine te bouwen zodat je vanuit een webapplicatie in ASP in verschillende velden kan zoeken in de database.
Dit werkt allemaal prima dus daarover heb ik geen vraag.

Ik zie alleen wel iets raars, als ik namelijk de query die ik samenstel in ASP op het scherm print is dit bijvoorbeeld:

SQL:
1
2
3
4
5
SELECT * FROM klanten
INNER JOIN plaatsen ON klanten.klant_plaats = plaatsen.plaats_id
WHERE (klant_bedrijfsnaam LIKE '%test%' OR klant_adres LIKE '%test%' OR klant_adresnr LIKE '%test%' OR plaats_naam LIKE '%test%')
AND (klant_bedrijfsnaam LIKE '%utrecht%' OR klant_adres LIKE '%utrecht%' OR klant_adresnr LIKE '%utrecht%' OR plaats_naam LIKE '%utrecht%')
ORDER BY klant_bedrijfsnaam, klant_plaats


Als ik deze query vanaf het scherm uit de webapplicatie kopieer en plak in een SQL query in de SQL Server Enterprise Manager op de table en deze run maakt hij er de volgende query van:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT * FROM klanten
INNER JOIN plaatsen ON klanten.klant_plaats = plaatsen.plaats_id
WHERE(klanten.klant_bedrijfsnaam LIKE '%test%') AND (klanten.klant_bedrijfsnaam LIKE '%utrecht%')
OR (klanten.klant_bedrijfsnaam LIKE '%test%') AND (klanten.klant_adres LIKE '%utrecht%')
OR (klanten.klant_bedrijfsnaam LIKE '%test%') AND (klanten.klant_adresnr LIKE '%utrecht%')
OR (klanten.klant_bedrijfsnaam LIKE '%test%') AND (plaatsen.plaats_naam LIKE '%utrecht%')
OR (klanten.klant_bedrijfsnaam LIKE '%utrecht%') AND (klanten.klant_adres LIKE '%test%')
OR (klanten.klant_adres LIKE '%test%') AND (klanten.klant_adres LIKE '%utrecht%')
OR (klanten.klant_adres LIKE '%test%') AND (klanten.klant_adresnr LIKE '%utrecht%')
OR (klanten.klant_adres LIKE '%test%') AND (plaatsen.plaats_naam LIKE '%utrecht%')
OR (klanten.klant_bedrijfsnaam LIKE '%utrecht%') AND (klanten.klant_adresnr LIKE '%test%')
OR (klanten.klant_adres LIKE '%utrecht%') AND (klanten.klant_adresnr LIKE '%test%')
OR (klanten.klant_adresnr LIKE '%test%') AND (klanten.klant_adresnr LIKE '%utrecht%')
OR (klanten.klant_adresnr LIKE '%test%') AND (plaatsen.plaats_naam LIKE '%utrecht%')
OR (klanten.klant_bedrijfsnaam LIKE '%utrecht%') AND (plaatsen.plaats_naam LIKE '%test%')
OR (klanten.klant_adres LIKE '%utrecht%') AND (plaatsen.plaats_naam LIKE '%test%')
OR (klanten.klant_adresnr LIKE '%utrecht%') AND (plaatsen.plaats_naam LIKE '%test%')
OR (plaatsen.plaats_naam LIKE '%test%') AND (plaatsen.plaats_naam LIKE '%utrecht%')
ORDER BY klanten.klant_bedrijfsnaam, klanten.klant_plaats


De query duurt dan ook veel langer om uit te voeren dan als ik het via de webapplicatie doe. En als ik de eerste bovenste query plak in de SQL Query Analyzer gaat het ook heel snel en past hij de query ook niet aan.

Mijn vraag daarom is: kan iemand mij uitleggen waar de query in de SQL Server Enterprise Manager de query zo aanpast?? :?
Het gaat hierbij om SQL Server 2000 met SP3

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Om eerlijk te zijn heb ik zo geen idee, maar waarom zou je Enterprise Manager hiervoor gebruiken?

Als je van beide queries het Executieplan bekijkt, zijn die ook anderes? Ik kan me nl. niet goed voorstellen dat de query engine beide queries niet op dezelfde manier optimaliseerd.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 07-05 10:04
Zo te zien gaat hij met wat boolean algebra de combinaties helemaal uitschrijven. Neem aan dat de sql engine dit ook moet doen met jou query voordat ie em kan runnen. In snelheid mag het dus ook niet uitmaken.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Ik heb ook de ervaring dat als je een goed sql-statement in het sql-panel van de view-builder plakt, deze behoorlijk wordt omgegooid zodra je naar het grid-panel gaat. Volgens mij doetie dat om hem in het grid-panel weer te kunnen geven.
niet doen dus...(== view aanmaken via script) ;)

  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
farlane schreef op vrijdag 15 april 2005 @ 10:36:
Zo te zien gaat hij met wat boolean algebra de combinaties helemaal uitschrijven. Neem aan dat de sql engine dit ook moet doen met jou query voordat ie em kan runnen. In snelheid mag het dus ook niet uitmaken.
Nee, zo te zien niet dus. Want als ik hem direct run in de SQL Server Enterprise Manager maakt hij er eerst iets anders van, en een iets langere versie dan hierboven doet er dan bijna 20 sec over om van de query het resultaat te laten zien.
Terwijl als ik het via de webapplicatie doe het binnen < 1 sec gaat.

Vreemd toch?

De SQL Query Analyzer past de query niet aan en runt hem net zo snel als via de webapplicatie!

[ Voor 8% gewijzigd door Urk op 15-04-2005 11:11 . Reden: toevoeging ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
De versie in EM is in principe hetzelfde, daarom is het zo raar dat hij er veel langer over doet. Kun je eens naar verschillen in het executieplan kijken?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
P_de_B schreef op vrijdag 15 april 2005 @ 11:11:
De versie in EM is in principe hetzelfde, daarom is het zo raar dat hij er veel langer over doet. Kun je eens naar verschillen in het executieplan kijken?
Sorry, maar wat bedoel je met executieplan?? :?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Urk schreef op vrijdag 15 april 2005 @ 11:14:
[...]

Sorry, maar wat bedoel je met executieplan?? :?
http://www.sql-server-per...ecution_plan_analysis.asp

Dit is erg belangrijk om performance problemen op te sporen met een bepaalde query. Dit geeft precies aan met welk deel van de query de database het langst bezig is, welke indexen worden gebruikt, of juist waar geen indexen worden gebruikt.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Urk schreef op vrijdag 15 april 2005 @ 11:10:
[...]

Nee, zo te zien niet dus. Want als ik hem direct run in de SQL Server Enterprise Manager maakt hij er eerst iets anders van, ...
Heb je mijn post van 10:46u gelezen?

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Ik wil geen open deur intrappen, maar ik doe het toch ff: maak in godsnaam gebruik van full-text indexing, ipv allemaal LIKE-clausjes. is veeeeeeel sneller, en je query is netter.

日本!🎌


  • Urk
  • Registratie: Maart 2000
  • Laatst online: 04-05 11:56
_Thanatos_ schreef op vrijdag 15 april 2005 @ 12:42:
Ik wil geen open deur intrappen, maar ik doe het toch ff: maak in godsnaam gebruik van full-text indexing, ipv allemaal LIKE-clausjes. is veeeeeeel sneller, en je query is netter.
Hoe bedoel je dit precies? Ben namelijk niet echt een SQL Prof.
Heb je hier een theoretisch of praktijk voorbeeld (in SQL code) van??
Alvast _/-\o_

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Urk schreef op maandag 18 april 2005 @ 21:14:
[...]

Hoe bedoel je dit precies? Ben namelijk niet echt een SQL Prof.
Heb je hier een theoretisch of praktijk voorbeeld (in SQL code) van??
Alvast _/-\o_
Zijn daarvan niet genoeg voorbeelden te vinden in de search van GoT, via Google of in SQL Books Online??

bijv dit artikel vind ik binnen de minuut zoeken....

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Gé Brander
  • Registratie: September 2001
  • Laatst online: 15-04 19:43

Gé Brander

MS SQL Server

Hetgeen je hier beschrijft treedt inderdaad op in Enterprise Manager. Om een of andere reden denkt de Enterprise Manager beter te weten hoe je je query zou willen hebben. Uitermate irritant, en waarom is mij een raadsel.

Gebruik Query Analyzer om je query's te maken en niet Enterprise Manager. Het is daar echt een gedrocht voor.

Ik heb hetzelfde probleem in Visual Studio .Net 2003. Die gebruikt volgens mij dezelfde engine daarvoor.

Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Urk schreef op maandag 18 april 2005 @ 21:14:
Hoe bedoel je dit precies? Ben namelijk niet echt een SQL Prof.
Heb je hier een theoretisch of praktijk voorbeeld (in SQL code) van??
Alvast _/-\o_
Doet Google het bij jou niet? :o In Programming & Webscripting verwachten we wel een beetje eigen inzet hoor. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1