Datenbakoperation schneller machen?

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

  • Datenbakoperation schneller machen?

    Ich habe Probleme mit der Geschwindigkeit der Datenbankzugriffe!
    Habe schon ewig überlegt, aber finde keine andere Algorithmuslösung.
    Deshalb meine Frage:
    Ist es möglich C++ in PHP zu integrieren, um dann von C++ die Datenbankabfragen machen zu lassen?
    Oder hat jemand andere Lösungsmöglichkeiten?
    Auf der Suche im Netz bin ich auf APL gestossen. Das ist aber nicht ganz das, was ich suche (soweit ich das verstanden habe).

  • #2
    bist du dir sicher, das du nicht mit geschickteren querys das eine oder andere prozentchen rausholen kannst ?
    meine Projekte bestaunen: http://www.kleiza.de

    Kommentar


    • #3
      jepp, da solltest du eher nach schauen.

      mit dem richtigen DB-Design und den passenden querys kannst du mehr als nur ein paar % rausholen!

      gruss

      Kommentar


      • #4
        Ich habe es zwar schon gemacht (nur noch 20 sec statt über 100), aber vielleicht geht ja noch ein bissle.
        Allerdings liegt das Problem in der Menge der Datenabfragen. Ich denke da wird man auch mit etwas geschickteren Querys nicht mehr allzu viel machen können.
        Ich bräuchte vielleicht auch nur Schlagwörter, mit denen ich dann selber weiter suchen könnte. Wenn also irgendwer etwas von so einer Möglichkeit gehört hat, bitte melden!

        Kommentar


        • #5
          verwendest du einen Index ??

          gruss

          Kommentar


          • #6
            ich versteh jetzt nicht was du genau erreichen willst, schnellere abfrage von einer einzige query wirst du wohl kaum in einer anderren aprache finden, kannst ja von mysql auf was anderes umsteigen.. wenn du aber allgemein eine schnellere web-sprache haben willst, dann guck dir doch das ASP,PERL,C unterforum an..
            meine Projekte bestaunen: http://www.kleiza.de

            Kommentar


            • #7
              Ich habe eine Datenbank mit sehr vielen Einträgen, die ein Datum enthalten. Nun habe ich eine Jahresübersicht erstellt(im Prinzip einen Kalender), die für jeden Tag anzeigt, wieviele Einträge die Datenbank hat. Die Darstellung allein dauert beinahe 3 Sekunden. Und weil eben für jeden einzelnen Tag genau die Anzahl berechnet werden muss sind das sehr viele Datenbankabfragen, die sehr viel Rechenzeit benötigen.

              Ich weiss nicht, was du mit Index meinst, aber ich habe zwei Tabellen. In der einen die ganzen Einträge mit Datum und Verweis auf den primary key der anderen Tabelle (Personenkennnummer)und noch ein paar Zusatzinformationen (es sollte etwa wie ein Terminplaner funktionieren)

              Ist es möglich ein SELECT auf ein schon vorhandenes result auszuführen?
              Also in etwa so:
              $result=mysql_query("SELECT * FROM hallo WHERE ... , $link);
              $res=mysql_query("SELECT a,b FROM $result WHERE ... , $link);

              Das funktioniert nämlich bei mir nicht. Wie ist es denn möglich?

              Kommentar


              • #8
                wenn ich dich richtige verstanden hab, machst du in etwa folgen anweisung

                "select count(*) from kalender where time between blabla and blabla2"
                ok, diese abfrage 365 mal aufzurufen ist etwas umständlich, mein vorschlag: erstelle eine neue tabelle, mit 365 einträge(eins für jeden tag) !
                mach ein kleinen script, das die anzahl der datensätze ensprechen in die neue tabelle abspeichert und für den script einmal durch, nun hast du in der neu tabelle die anzahl der einträge,
                und erweitere die neuspeichrung von daten um ein query, der den entsprechenden datesatz in der neuen tabellen um eins hochzählt
                das sollte doch einiges an preformance sparen,

                innovate
                meine Projekte bestaunen: http://www.kleiza.de

                Kommentar


                • #9
                  jepp! geh von den Counts über komplette Tabellen weg! leg dir lieber ne neue Tabelle an, wo du einen Wert bei jedem Eintrag nur noch inkrementierst, das spart haufenweise performance!

                  gruss

                  Kommentar


                  • #10
                    im klar text:

                    das hochzählen:
                    "update kalenderanzahl set anzahl=anzahl+1 where zeit='15.09.02'"
                    ausgabe:
                    "select * from kalenderanzahl where zeit='15.09.02'"
                    oder
                    "select * from kalenderanzahl";
                    und dann die array halt mit while($anzahl=mysql_fetch_array($resource))
                    erstellen.
                    meine Projekte bestaunen: http://www.kleiza.de

                    Kommentar


                    • #11
                      Danke für die Tips!
                      Aber allgemein würde es mich trotzdem interessieren, ob ein select auf ein vorheriges select möglich ist.
                      Hört sich zwar doof an, aber ich hoffe, ihr wisst was ich meine.

                      Kommentar


                      • #12
                        jepp, ist möglich.

                        momentan mußt du eine SELECT-abfrage machen und mit den Ergebnissen eine 2.SELECT-abfrage durchlaufen.

                        ab Version 4 sind multiple Selects möglich.

                        gruss

                        Kommentar


                        • #13
                          Kann ich da bitte noch ein klitzekleines Code-Beispiel haben?

                          Kommentar


                          • #14
                            PHP-Code:
                            $query1 "SELECT ...";
                            $result1 mysql_query(...);
                            while (
                            $row1 mysql_fetch_array()) {
                               
                            $query2 "SELECT ... WHERE a=$row1[wert]";
                               
                            $result2 mysql_query(...);
                               while (
                            $row2 =  mysql_fetch_array()) {
                                  
                            //ausgabe   
                               
                            }

                            Kommentar


                            • #15
                              Ich weiss, ich bin hartnäckig. ;-)

                              Aber: Entweder habe ich etwas nicht verstanden, oder du mich nicht.

                              Wenn ich mich nicht irre, wird bei deinem Beispiel die DB noch einmal kontaktiert, mit einer Bedingung aus dem ersten SELECT.

                              Ich wollte aber, dass man die Datenbank nicht mehr abfrägt, sondern direkt vom Ergebnis des ersten SELECTS(beispiel: 20 Datensätze) nur noch die gewünschten 2 Datensätze erhält.

                              Beispiel:

                              $result1=mysql_query("SELECT Datum, Kunde FROM bla WHERE Datum>2002-01-01 AND Datum<2002-01-31");
                              als nächstes:
                              $result2=mysql_query("SELECT Datum,Kunde FROM bla WHERE Datum=2002-01-10");

                              So funktioniert es einwandfrei!
                              Ist es jetzt aber möglich, die zweite DB-Abfrage zu umgehen, indem man das zweite SELECT direkt auf $result1 anwendet?

                              Kommentar

                              Lädt...
                              X