[MySQL 4.0] Alternative zu Concat / Umformung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    ...
    OffTopic:

    Code:
    FROM 
                     Tobias t
    LEFT JOIN Pferde p ON t.id=p.id
    LEFT JOIN Events e ON t.id=e.id


    ...


    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

    Kommentar


    • #17
      OffTopic:
      naja, ob die query das gewünschte ergebnis liefert?

      Kommentar


      • #18
        So kommet mir doch zu Hülf'.

        Ich verstehe nicht was ihr mit eurem Fachchinesisch meint.

        Kommentar


        • #19
          dann lies halt mal den Sticky in diesem Forum. Ist ja nicht zu übersehen.

          Kommentar


          • #20
            Code:
              SELECT
                         COUNT()
              FROM
                         [COLOR=red]tab1 t1[/COLOR]
              LEFT JOIN  tab2 t2 ON t1.spalte1=t2.spalte2
              [COLOR=red]LEFT JOIN[/COLOR]  tab3 t3 ON t1.spalte1=t3.spalte3
            fällt dir was auf? wenn nicht, soll es wohl nicht sein
            Zuletzt geändert von xManUx; 05.12.2004, 17:39.

            Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
            sondern mit den Augen das Manual zu lesen.

            Kommentar


            • #21
              Hallo,
              ich habe es nun geschafft:
              Code:
              SELECT
                  COUNT(t2.idx) as total
              FROM
                  idx t2
              LEFT JOIN
                  dirs t1 ON t2.IDXdir = t1.idx
              LEFT JOIN
                  ftps t3 ON t2.IDXftp = t3.idx
              LEFT JOIN
                  files t4 ON t2.IDXfil = t4.idx
              WHERE
                  CONCAT(t1.dstring,t4.dstring) REGEXP "test"
              Dieser Befehl ist allerdings immernoch langsam.

              Ich wage zu behaupten, dass dieser langsamer ist, als der vorherige !?

              Kommentar


              • #22
                schon INDEXes gesetzt?

                Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                sondern mit den Augen das Manual zu lesen.

                Kommentar


                • #23
                  kann mir gut vorstellen, dass es am concat liegt. schließlich muss für jeden datensatz überprüft werden, ob die spalten zusammen das gewünschte ergebnis liefern.

                  mach mal ein beispiel, wofür due concat unbedingt brauchst. Probiers mal mit ner WHERE ohne concat und guck mal ob die schneller ist.

                  Kommentar


                  • #24
                    Indexes wurden gesetzt und bringen m.E. nicht sonderlich tollen Leistungsschub.

                    SELECT
                    COUNT(t2.idx) as total
                    FROM
                    idx t2
                    jOIN
                    dirs t1 ON t2.IDXdir = t1.idx
                    JOIN
                    ftps t3 ON t2.IDXftp = t3.idx
                    JOIN
                    files t4 ON t2.IDXfil = t4.idx
                    WHERE
                    t1.dstring REGEXP "test"
                    AND
                    t4.dstring REGEXP "test"


                    Habe ich mal probiert, dauert paar Sekunden weniger, dafür kommt ein falsches Ergebnis raus. Nur 200 gezählt, statt 17000 !

                    Kommentar


                    • #25
                      dann probier mal statt AND, OR... ? was kommt raus?

                      EDIT:

                      wieso hast du schon wieder "LEFT" draußen?



                      wenn meine vermutung richtig ist, dürfte INNER JOIN besser sein!? just try it!

                      falls das alles nicht hilft, würde ich mal http://dev.mysql.com/doc/mysql/de/EXPLAIN.html in erregung ziehen² oder es mal mit LIKE vergleichen.
                      Zuletzt geändert von xManUx; 05.12.2004, 18:15.

                      Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                      sondern mit den Augen das Manual zu lesen.

                      Kommentar


                      • #26
                        Original geschrieben von presentweb
                        Indexes wurden gesetzt und bringen m.E. nicht sonderlich tollen Leistungsschub.
                        wenn du nur JOIN alleine in deiner Abfrage hast, dann kannst du auch gleich weg lassen, denn es ist das gleiche wie ohne, es ist also ein CROSS JOIN, somit bist du wieder da, wo du angefangen hast. Warum beschäftigst du dich nicht richtig damit, um solche Fehler zu vermeiden. Wir haben dir die Richtung gezeigt, der Rest mußt von dir kommen, mehr kann man nicht tun.

                        Kommentar


                        • #27
                          Jo gut,

                          eure Tipps brachten bis jetzt keinerlei Erfolg!

                          Gruss

                          Kommentar


                          • #28
                            ich verstehe deine datenbankdesign nicht, erklärst du's mir?

                            und poste doch mal bitte dein aktuelles SELECT sowie einen dump der relevanten tabellen (letzteren solltest du aber besser anhängen)
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #29
                              Original geschrieben von mrhappiness
                              ich verstehe deine datenbankdesign nicht, erklärst du's mir?
                              OffTopic:

                              Ich verstehs auch nicht......
                              Ein inner join an der richtigen Stelle könnte möglicherweise auch die zu ermittelnden NULL Werte veringern und wäre damit evtl. schneller......

                              [color=blue]MfG Payne_of_Death[/color]

                              [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                              [color=red]Merke:[/color]
                              [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                              Murphy`s Importanst LAWS
                              Jede Lösung bringt nur neue Probleme
                              Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                              In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                              Kommentar


                              • #30
                                So,

                                gerne möchte ich eure Hilfe in Anspruch nehmen.
                                BTW: Gibt es ein Programm, mit dem man SQL Tabellen grafisch darstellen kann (um anderen Entwicklern das Design zu zeigen)

                                Die Datenbank sieht so aus:
                                Code:
                                CREATE TABLE `dirs` (
                                  `idx` bigint(20) NOT NULL auto_increment,
                                  `dstring` text NOT NULL,
                                  PRIMARY KEY  (`idx`),
                                  FULLTEXT KEY `dstring` (`dstring`)
                                ) TYPE=MyISAM
                                
                                CREATE TABLE `files` (
                                  `idx` bigint(20) NOT NULL auto_increment,
                                  `dstring` text,
                                  PRIMARY KEY  (`idx`),
                                  FULLTEXT KEY `dstring` (`dstring`)
                                ) TYPE=MyISAM
                                
                                CREATE TABLE `ftps` (
                                  `idx` int(11) NOT NULL auto_increment,
                                  `hos` text,
                                  `pos` text,
                                  `uss` text,
                                  `pas` text,
                                  `sch` int(20) NOT NULL default '0',
                                  `email` text,
                                  `time` int(20) NOT NULL default '0',
                                  `dirs` int(20) NOT NULL default '0',
                                  `files` int(20) NOT NULL default '0',
                                  `upd` int(20) NOT NULL default '0',
                                  PRIMARY KEY  (`idx`)
                                ) TYPE=MyISAM
                                
                                CREATE TABLE `idx` (
                                  `idx` bigint(20) NOT NULL auto_increment,
                                  `IDXftp` bigint(20) default NULL,
                                  `IDXdir` bigint(20) default NULL,
                                  `IDXfil` bigint(20) default NULL,
                                  `IDXsiz` bigint(20) default NULL,
                                  `IDXtim` int(11) default NULL,
                                  PRIMARY KEY  (`idx`),
                                  KEY `IDXftp` (`IDXftp`),
                                  KEY `IDXdir` (`IDXdir`),
                                  KEY `IDXfil` (`IDXfil`)
                                ) TYPE=MyISAM
                                Dumpen (Tabellen mit Daten ?) kann ich unmöglich anhängen, da die Datenbank 100 MB groß ist.

                                So sieht mein Query aus, welches die Suchergebnisse zählen soll

                                Code:
                                SELECT
                                    COUNT(t2.idx) as total
                                FROM
                                    idx t2
                                LEFT JOIN
                                    dirs t1 ON t2.IDXdir = t1.idx
                                LEFT JOIN
                                    ftps t3 ON t2.IDXftp = t3.idx
                                LEFT JOIN
                                    files t4 ON t2.IDXfil = t4.idx
                                WHERE
                                    CONCAT(t1.dstring,t4.dstring) REGEXP "test"
                                aus.

                                Was soll es tun ? Überall wo das Wort "test" vorkommt soll mitgezählt werden.

                                Hoffe, es hilft weiter!

                                Kommentar

                                Lädt...
                                X