SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 03.06.2008, 17:23:57
auhur auhur ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 5
Query-Optimierung - Sortierung

Hallo,

ich habe folgendes Problem:

Script: Auf einer Seite werden einzelne Fotos aufgelistet. Diese Fotos besitzen jeweils einen Datenbankeintrag der eine Unique ID, publish (veröffentlichungsdatum als unix timestamp) und eine Kategorisierung (INT) aufweist.

Auf jeder dieser Fotoseiten befinden sich folgende Links: "<< letztes Bild | Alle Bilder der Kategorie | nächstes Bild >>". Die Aufgabe dieser Links sollte klar sein. Soweit hört sich das sicher noch sehr einfach an, komme ich mal zum

Problem: Die Fotos sollen nicht anhand der ID sondern anhand des Veröffentlichungsdatum (publish) in der richtigen Reihenfolge aufgelistet werden. Es kann vorkommen, das mehrere Einträge gleiche Daten-Timestamps aufweisen. Was ich für die Navigation demnach brauche, ist die jeweilige ID des vorhergegangenen und folgenden Bildes. Das Script läuft soweit. Nur sind die MySQL Prozesse dieser Funktion viel zu arbeitsaufwändig, da durch die Sortierung ja erst einmal tausende von unnötigen Datensetzen abruft!

Wie könnte man das optimieren?

Code:
SELECT
	id
FROM
	pictures
WHERE
	publish>='$aktuellerTS'
	AND id!='$aktuelleID'
	$q
ORDER BY
	publish ASC
LIMIT
	1
Den Query benutze ich ein zweites mal um auch die ID des vorhergegangenen Bildes abzurufen. Dann halt mit "...publish<=..." und "...ORDER BY publish DESC..."

Am besten wäre natürlich, wenn man aus den zwei Queries einen machen könnte. Nur glaube ich nicht, dass dies in einer Abfrage a la ...

SELECT id .... WHERE publish ~eine stelle kleiner ist als aktuellerTS ~ ORDER BY publish ASC LIMIT 3

... möglich wäre. Das wäre jedoch genau das was ich suche.

Problematisch ist, das die Tabelle aus über 50.000 Einträgen besteht und demnach bei jedem Scriptaufruf alle diese Einträge - ein Teil vorwärts , und der andere Teil rückwärts anhand des Timestamps des aktuell angezeigten Bildes - gescannt werden muss.

Ich hatte auch den Ansatz, ein Array aus den Datensätzen zu erstellen und PHP die Arbeit übernehmen zu lassen, indem ich mir immer die positionen raus suche, die ich grade brauche. Das ist aber kaum machbar, da die Bilder 5-6 verschiedene Kategorien aufweisen, für die jedesmal ein einzelnes Array erstellt werden müsste, welches sehr groß werden würde. Zudem kommen noch ständige Updates innerhalb der Tabelle.


Kann mir jemand helfen?


Bitte! :)

Geändert von auhur (03.06.2008 um 17:24:48 Uhr)
Mit Zitat antworten
  #2  
Alt 05.06.2008, 10:14:28
stb stb ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 40
AW: Query-Optimierung - Sortierung

Spalten, die in irgend einer Form mit WHERE oder JOIN in Verbindung gebracht werden, sollte man mit einem Index versehen. Dann sind Abfragen selbst über mill. Zeilen kein problem mehr.

Wenn du merkst, das deine Datenbank für eine Abfrage jedesmal die gesammte Datenbank durchsucht, dann brauchst du einen Index. Das ist ja gerade die Stärke der Datenbanken.

Denn sonst könntest du auch den ganzen Mist in eine simple Textdatei speichern und mit PHP durchsuchen...
Mit Zitat antworten
  #3  
Alt 05.06.2008, 11:51:43
auhur auhur ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 5
AW: Query-Optimierung - Sortierung

danke. aber indizes sind natürlich gesetzt.
Mit Zitat antworten
  #4  
Alt 07.06.2008, 12:08:57
stb stb ist offline
Anfänger
 
Registriert seit: May 2008
Beiträge: 40
AW: Query-Optimierung - Sortierung

Dann lass dir doch mal mit EXPLAIN SELECT... mehr infos über den Select geben.
Wenn MySQL für einen einfachen select jedesmal die ganze Tabelle durchläuft, funktioniert irgend ein Index nicht, oder du hast einen WHERE oder ON auf einer Spalte, die nicht indiziert ist.
Spalte publish (timestamp) z.B. sollte indiziert sein, weil ein Join drauf läuft...
__________________
Das schwerste ist das Einfachste:

www.rentstock.de

Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Query erst langsam dann schnell Matthias MySQLi/PDO/(MySQL) 11 19.09.2007 20:31:43
2 (oder mehr ) Tabellen in einem query abfragen?!¿ Roach MySQLi/PDO/(MySQL) 2 27.12.2005 12:33:13
Optimierung bei INNER JOIN mit großen Tabellen henning666 MySQLi/PDO/(MySQL) 8 27.07.2005 13:42:25
To Many Connections ProGamer11 PHP Grundlagen 0 18.06.2003 23:52:56
MySQL Invalid Query!! :( Gentlemani PHP Grundlagen 3 28.01.2003 15:44:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:34:46 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt