php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 31-07-2007, 11:44
frank7l7
 Registrierter Benutzer
Links : Onlinestatus : frank7l7 ist offline
Registriert seit: Aug 2003
Beiträge: 810
frank7l7 ist zur Zeit noch ein unbeschriebenes Blatt
Question Volltextindex vs. Index

Frage,

mal angenommen ich hab eine Profil Tabelle in der folgenden Daten eines Users gespeichert sind:

- Name
- Vorname
- Email
- Ort
- Strasse
- PLZ
- Homepage
- ...

Die Liste könnte noch weiter gehen. Eine Suche über alle Felder soll möglich sein! Natürlich wäre es jetzt quatsch auf alle Felder mit einem OR Operator zu suchen zumal MySQL nur eine Index pro Query benutzt und ja mehr oder weniger selber entscheidet welchen er nimmt.

Voraussetzung: Die Daten existieren in den verschiedensten Sprachen und in den Tabellen wird UTF-8 benutzt.

Was ist jetzt die performantere Lösung angesichts steigender Profil Datensätze:

- Eine neue Spalte in der gleichen Tabelle in der alle Daten leerzeichen getrennt dupliziert werden und darauf ein Volltext Index zu legen. Da gibt glaub ich Probleme mit nicht gleichen Zeichensätzen!?

oder

- Eine 2 Tabelle nur zum Suchen in der es 2 Spalten gibt, die ID zum Datensatz in der eigentlichen Profil Tabelle als Referenz und 1 Spalte wo für einen Datensatz aus der Profil Tabelle jeder Wert eingefügt wird. Darauf einen Index und fertig. Ach ja, die Abfrage sehen dann aber auch anders aus von Wegen JOIN, evtl. Subselect. Ist ja auch ein Performance Kriterium!

Vollindex oder Suchtabelle? dat is hier die Frage

(ähm evtl. ist das hier auch besser im Brainstorming aufgehoben?!)

f*

Geändert von frank7l7 (31-07-2007 um 11:57 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 31-07-2007, 12:13
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Volltextindex vs. Index

Zitat:
Original geschrieben von frank7l7
Voraussetzung: Die Daten existieren in den verschiedensten Sprachen und in den Tabellen wird UTF-8 benutzt.
[...]
- Eine neue Spalte in der gleichen Tabelle in der alle Daten leerzeichen getrennt dupliziert werden und darauf ein Volltext Index zu legen. Da gibt glaub ich Probleme mit nicht gleichen Zeichensätzen!?
Wenn die Daten durchgängig UTF8 sind ist doch kein Problem da?!


Generell Suchtabelle, weil man ansonsten spontan die Haupt-Tabelle in ihrer Größe verdoppelt.
Alternativ kannst du dir auch lucene anschauen http://lucene.apache.org/ ist allerdings dann java
Mit Zitat antworten
  #3 (permalink)  
Alt 31-07-2007, 14:30
frank7l7
 Registrierter Benutzer
Links : Onlinestatus : frank7l7 ist offline
Registriert seit: Aug 2003
Beiträge: 810
frank7l7 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmm, stellt sich nur noch die frage wie dann der index sortiert wird bei einer UTF-8 Spalte. Nur zur Verständis wenn ich alle Sprachen in einer Spalte unterbringen, chinesisch, russich, englisch, ... wie wird der index dann sortiert? Der Index wird ja nachdem B-Tree Prinzip mit Schlüssel / Wert paar angelegt, aber die Sortierung? Wenn ich alle sprachen bunt gemischt habe dauert doch die die Suche im Index auch länger. Wäre es dann nicht besser für jede Sprache eine eigene Tabelle zu machen?

Oder halt, der Index ist doch dann auch UTF-8, läuft die Suche auf dem Index dann eigentlich Binär? Dann wäre es ja auch egal.

Hm, noch etwas schwer zu greifen die Sache ....
Mit Zitat antworten
  #4 (permalink)  
Alt 31-07-2007, 15:28
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du solltest dich fragen: Willst du immer alle Sprachen durchsuchen?
Wenn ich nach Bar suche im deutschen, will ich mit Sicherheit nicht nach bar im Englischen suchen.
D.h. du müsstest die Spalten trennen.

Was das ganze mit der Sortierung zu tun haben soll verstehe ich nicht und dass eine Volltextsuche als binärer Baum realisiert werden sollte, wage ich zu bezweifeln (auch wenn ich es nicht weiß).

Geändert von ghostgambler (03-08-2007 um 14:55 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 31-07-2007, 15:46
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Vielleicht habe ich dich nur falsch verstanden, aber ich komme partout nicht hinter dein Problem. Du hast bisher eine Tabelle mit x Spalten. Alles UTF-8. Darin liegen y Datensätze in verschiedenen Sprachen (Userprofile von Chinesen, Deutschen, etc.). Da man in MySQL aber nicht datensatzweise ein Charset angeben kann, sind alle Datensätze in UTF-8.

Konkatenierst du nun die Spalten zur neuen Spalte x+1 (die natürlich auch UTF-8 ist), gibt es doch nur ein Problem beim Sortieren. Aber du willst ja gar nicht sortieren. Nur suchen.

Suchen ist immer gleich: Du hast einen UFT-8 kodierten String "abc" und MySQL soll dir alle Datensätze liefern, bei denen die Spalte x+1 LIKE '%abc%' ist.

Sollte es im Chinesischen Buchstaben geben, die dem "abc" entsprechen, sind sie in der UTF-8-Tabelle wo ganz anders als die ASCII-Zeichen.

Ghostgamblers Einwand ist allerdings nicht von der Hand zu weisen. Eine der x Spalten wird aber sicherlich enthalten, in welcher Sprache der User spricht. Wenn du möchtest, kannst du das ja berücksichtigen wenn ein deutscher User nach "bar" sucht.

Geändert von onemorenerd (31-07-2007 um 15:48 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 03-08-2007, 14:03
frank7l7
 Registrierter Benutzer
Links : Onlinestatus : frank7l7 ist offline
Registriert seit: Aug 2003
Beiträge: 810
frank7l7 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

okay ich hab mich an gewissen Stellen etwas undeutlich ausgedrückt. mir ist auf jedenfall einiges klarer geworden, die suchwörter kommen einfach in eine eigenen Suchtabelle für jede Sprache getrennt. eine Index drauf un gut ist ...

fra*
Mit Zitat antworten
Antwort

Lesezeichen


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

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:12 Uhr.