Ankündigung

Einklappen
Keine Ankündigung bisher.

Select auf große db

Einklappen

Neue Werbung 2019

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

  • Select auf große db

    Hallo,

    ich habe eine Tabelle mit 150000 Kundendatensätzen und muss jeden Datensatz einzeln ansprechen.
    Ich brauche zb. die ersten zwei Zeichen vom Vornamen und die letzten zwei vom Nachnamen. Ich könnte natürlich genau diese Zeichen abfragen aber ich möchte noch Punkte, Leerzeichen, Bindestriche usw rausfiltern.
    Macht es Sinn das mit PHP zu machen? Oder sollte ich SQL verwenden.
    Ich habe es bis jetzt mit PHP gemacht. Funktioniert auch gut bei 5000 Datensätzen...

    Danke


  • #2
    Wo ist denn das Problem?
    Fehler? Bricht das Script ab?
    Was ist der Einsatzort?

    Ohne genauere Angaben ist es schwer zu helfen...
    "My software never has bugs, it just develops random features."
    "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

    Kommentar


    • #3
      Naja es dauert eben unglaublich lange. Also bei 5000 braucht er 26 Sekunden.
      Bei 1500000 habe ich nach 20 min abgebrochen...
      Ich suche nach Doppelten Werten und da muss ich die Daten erstmal vorsortieren.
      Deswegen brauch ich von jedem Datensatz ein paar Zeichen.

      Fehler gibt es keine und ein Abbruch kommt auch nciht vor.

      Kommentar


      • #4
        Zitat von walrada Beitrag anzeigen
        Naja es dauert eben unglaublich lange. Also bei 5000 braucht er 26 Sekunden.
        Bei 1500000 habe ich nach 20 min abgebrochen...
        Ich suche nach Doppelten Werten und da muss ich die Daten erstmal vorsortieren.
        Deswegen brauch ich von jedem Datensatz ein paar Zeichen.

        Fehler gibt es keine und ein Abbruch kommt auch nciht vor.
        Naja 26 Sekunden bei 5000 Datensätzen ist schon recht lang. Das kann natürlich auch ein schlechtes bis sehr schlechtes DB Design und eine schlechte Vergabe der Indexes als Übel haben.

        Aber das kann dir hier keiner sagen, denn weder kennen wir dein DB Design, noch deine Abfrage, verwendest du Joins in der Abfrage, wenn ja welche in welchen Bezug? Wenn man z.B. einen Left Join verwendet obwohl man bei der Abfrage nur einen Inner Join bracuht, dann kann das schon die Performance unheimlich in die Knie zwingen.

        Besser gesagt nichts kennen wir, wie sollen wir dir denn da eine hilfreiche Antwort geben. Mit welchem DBMS arbeitest du?

        Gruß litter
        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
        http://www.lit-web.de

        Kommentar


        • #5
          Mach doch ein count in verbindung mit group.

          Kommentar


          • #6
            Ich nutze MySQL.
            Im folgenden die Abfrage von zwei Spalten.
            Kein Join oder sonstiges. Und es handelt sich um eine Tabelle mit sechs oder sieben Spalten.

            PHP-Code:
             public function selectfn()
                {    
                        
            $db Zend_Registry::get('conf');             
                          
            $db Zend_Db::factory('PDO_MYSQL'$db );              
                          
            $select $db->select()
                              ->
            from(array('p' => 'pub'),
                                        array(
            'p.id''p.first_name as fname''p.name as name'));
                                            
                    
            $entries $db->fetchAll($select);
                    
                    return 
            $entries;
                    
                } 
            Dann kommt die auswahl der Zeichen.
            und dann hab ich dieses Array.

            PHP-Code:
                            $keys[]= array(
                                    
            'name' =>$letter,
                                    
            'id'  =>(int)$key['id'],
                                   );
                        
                               
            sort($keys); 
            Also das sort($keys); frisst die ganze Zeit, hab ich grad rausgefunden.
            Aber ich muss es irgendwie Sortieren...
            Es gibt ja noch andere sortiermöglichkeiten. Die werde ich dann mal ausprobieren und kucken ob es besser wird.

            PS: Beim nächsten mal gebe ich von Anfang an etwas mehr Infos zu meiner Frage. Sorry

            Kommentar


            • #7
              Lass doch das SQL sortieren?!

              Kommentar


              • #8
                Jopp sehe ich auch so, im SQL sollte das ORDER BY schneller sein als in PHP
                "My software never has bugs, it just develops random features."
                "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                Kommentar


                • #9
                  Naja es dauert eben unglaublich lange. Also bei 5000 braucht er 26 Sekunden.
                  Bei 1500000 habe ich nach 20 min abgebrochen...
                  Das ist die 300-fache Datenmenge. Das hätte man sich auch ausrechnen können, dass das in der 50fachen Zeit nicht fertig wird..
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Ich suche nach Doppelten Werten und da muss ich die Daten erstmal vorsortieren.
                    Deswegen brauch ich von jedem Datensatz ein paar Zeichen.
                    Soll das eine einmalige wartungsarbeit sein? Falls ja wäre vermutlich folgendes einfacher:
                    Lege eine 2. tabelle nach selben schema an, setzte UNIQUE indexes über mehrere spalten (die, welche das kriterium für die doppelten datensätze sind), und trage nacheinander eine zeile nach der anderen dort ein, und fang einfach etwaige fehler die von der db kommen zwecks UNIQUE-verletzung ab.
                    Ergebnis ist eine saubere Tabelle...

                    Ansonsten: ORDER BY ins mysql statement einbauen könnte schonmal helfen.

                    Kommentar


                    • #11
                      ich versteh das Problem überhaupt nicht: erst mal 150k oder 1,5M Datensätze?
                      zum zweiten: werden die denn nicht über eine ID angesprochen?
                      Eine Suche wird man vllt doch durchführen müssen, aber will man dann ernsthaft 5000 Sätze _anzeigen_ lassen? da sähe ich höchstens Sinn in einem Export oder dergleichen..
                      Und falls ich merken würde, daß ne Suche zu lange dauert, würd ich mir überlegen, was diese Suchen gemeinsam haben und dann eine neue Tabelle mit Fremdschlüsseln auf die Haupttabelle legen, wobei die Spalten genau die Begriffe enthalten, nach denen gesucht wird (hier zb die Kombi 1.+2.Buchstabe und vorletzter und letzter Buchstabe). Mit dem Schlüssel kann ich dann auf die Haupttabelle losgehen und die Records dazu suchen und auch sortieren...

                      Kommentar

                      Lädt...
                      X