MS SQL Abfage optimieren

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

MS SQL Abfage optimieren

Beitrag von mk-soft »

Hi, brauche mal hilfe für ein Web Datenbankabruf zu optimieren.
In einer Datenbank werden alle anrufe Gespeichert. "infosystem.dbo.anrufe". Die zweite Datenbank kommt von unsere Verwaltungssoftware. In dieser sind die Rufnummer in sechs verschiedenen Spalten hinterlegt. Kann leider auch Text beinhalten. z.B. "0123456789 Handy". Außerdem können zwischen den Zahlen Leerzeichen sein.

Hier mal den CommandText für den Abruf.

Code: Alles auswählen

Dim CommandText As String = "select top 100 infosystem.dbo.anrufe.*, bedasoft.dbo.ut_adressen.name1 from infosystem.dbo.anrufe"

        CommandText = CommandText & " left join bedasoft.dbo.ut_adressen on "

        CommandText = CommandText & " (Telefon1 = infosystem.dbo.anrufe.von) or"
        CommandText = CommandText & " (Telefon2 = infosystem.dbo.anrufe.von) or"
        CommandText = CommandText & " (Telefon3 = infosystem.dbo.anrufe.von) or"
        CommandText = CommandText & " (Tel1Kurz = infosystem.dbo.anrufe.von) or"
        CommandText = CommandText & " (Tel2Kurz = infosystem.dbo.anrufe.von) or"
        CommandText = CommandText & " (Tel3Kurz = infosystem.dbo.anrufe.von)"

        'CommandText = CommandText & " (Telefon1 like ('%'+infosystem.dbo.anrufe.von+'%')) or"
        'CommandText = CommandText & " (Telefon2 like ('%'+infosystem.dbo.anrufe.von+'%')) or"
        'CommandText = CommandText & " (Telefon3 like ('%'+infosystem.dbo.anrufe.von+'%'))" ' or"
        'CommandText = CommandText & " (Tel1Kurz like ('%'+infosystem.dbo.anrufe.von+'%')) or"
        'CommandText = CommandText & " (Tel2Kurz like ('%'+infosystem.dbo.anrufe.von+'%')) or"
        'CommandText = CommandText & " (Tel3Kurz like ('%'+infosystem.dbo.anrufe.von+'%'))"
        CommandText = CommandText & " ORDER BY infosystem.dbo.anrufe.recid DESC"
Danke

P.S. Like funktioniert nicht richtig
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: MS SQL Abfage optimieren

Beitrag von bobobo »

da fehlt ne klammer um die or-geschichte , oder?

besides : das dürfte (je nach Datenumfang) sicher nicht die schnellste Abfrage sein.

öö pb ist das so aber nicht ganz, oder?
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: MS SQL Abfage optimieren

Beitrag von bobobo »

ne union abfrage erhöht zwar den Umfang der sqlAbfrage selber
beschleunigt die Ergebnislieferung aber u.U. enorm.

so in der Art (falls das geht)

Code: Alles auswählen

select d1.id as'ordercolumn' d1.dingsbums,d2,krams from dies d1 join das d2 on d1.diese=d2.dashier1
union
select d1.id as'ordercolumn' d1.dingsbums,d2,krams from dies d1 join das d2 on d1.diese=d2.dashier2
union
select d1.id as'ordercolumn' d1.dingsbums,d2,krams from dies d1 join das d2 on d1.diese=d2.dashier3
order by 'ordercolumn'
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: MS SQL Abfage optimieren

Beitrag von Kukulkan »

Hallo,

ich sehe das Problem, aber mit den Textfeldern wirst Du nicht glücklich und auch keine gute Erkennung erreichen. Ich würde eine zusätzliche Suchtabelle aufbauen:

AdressenID, Nummer

Darin würde ich die bereinigten Nummern zu den jeweiligen Adressen (ID) ablegen (erstmal in einem Batch, dann bei jedem neuen natürlich sofort). Die Nummern sollten normiert sein (zB 0049123456789). Eine Suche gestaltet sich dann viel einfacher, weil Du eine Nummer in dieser Tabelle direkt suchst (sehr schnell durch Indexe) und dann den Datensatz direkt auslesen kannst (einfacher JOIN). Ganz easy!

Volker
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MS SQL Abfage optimieren

Beitrag von mk-soft »

Die Anrufe lade ich über CAPI-Tool in die Datenbank und sind somit genormt.

Die Rufnummern in der Adressen Datenbank müssen noch überarbeitet werden und werden aus Rufnummer + Text bestehen. Ist leider so.

Nur mit Left Join tabelle on (x like y) funktioniert nicht so richtig
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: MS SQL Abfage optimieren

Beitrag von bobobo »

sabbersabber...left join on ((abfrage) or (abfrage2) or (Abfrage3)) sabbersabber...

s.o. wegen speed

ok (ich schäm mich) .. hab's nochmal gecheckt der blöde mssql-server macht's auch ohne klammer . .aber alleine aus hygienischen gründen tät ich nicht drauf verzichten wollen
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MS SQL Abfage optimieren

Beitrag von mk-soft »

Code: Alles auswählen

CommandText = "select top 100 infosystem.dbo.anrufe.*, bedasoft.dbo.ut_adressen.name1 from infosystem.dbo.anrufe"
        CommandText = CommandText & " left join on"
        CommandText = CommandText & " (where bedasoft.dbo.ut_adressen.Telefon1 like infosystem.dbo.anrufe.von)"
haut leider nicht hin.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MS SQL Abfage optimieren

Beitrag von mk-soft »

= Funktioniert

Code: Alles auswählen

CommandText = "select top 100 infosystem.dbo.anrufe.*, bedasoft.dbo.ut_adressen.name1 from infosystem.dbo.anrufe"
        CommandText = CommandText & " left join bedasoft.dbo.ut_adressen on"
        CommandText = CommandText & " (Telefon2 = von)"

Like Funktioniert nicht

Code: Alles auswählen

CommandText = "select top 100 infosystem.dbo.anrufe.*, bedasoft.dbo.ut_adressen.name1 from infosystem.dbo.anrufe"
        CommandText = CommandText & " left join bedasoft.dbo.ut_adressen on"
        CommandText = CommandText & " (Telefon2 like von)"

?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: MS SQL Abfage optimieren

Beitrag von Kiffi »

mk-soft hat geschrieben:Like Funktioniert nicht
IMO fehlen da die entsprechenden Wildcards. Ohne
diese ist eine 'Like' gleich '='.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: MS SQL Abfage optimieren

Beitrag von mk-soft »

Schon gefunden :D

Code: Alles auswählen

        CommandText = "select top 150 infosystem.dbo.anrufe.recid, infosystem.dbo.anrufe.datum, infosystem.dbo.anrufe.von, bedasoft.dbo.ut_adressen.name1 as name, infosystem.dbo.anrufe.an from infosystem.dbo.anrufe"
        CommandText = CommandText & " left join bedasoft.dbo.ut_adressen on"
        CommandText = CommandText & " (Telefon1 like von+'%') or"
        CommandText = CommandText & " (Telefon2 like von+'%') or"
        CommandText = CommandText & " (Telefon3 like von+'%')"

        CommandText = CommandText & " ORDER BY infosystem.dbo.anrufe.recid DESC"
mit Union geht es nicht so gut...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten