Guten Morgen!
Vielleicht findet sich hier jemand, der mir bei einem Problemchen helfen kann.
Ich habe für die User-Verwaltung ein paar Tabellen welche alle mit der id verknüpft sind.
Besuche ich nun ein Benutzerprofil, werden die Daten über den Usernamen geholt.
SELECT bla FROM blub WHERE LOWER(username) = ?
Auf username liegt ein FULLTEXT-INDEX welcher aber so nicht genutzt wird, EXPLAIN zeigt mir einen vollen Tabellenscan an, das wäre später natürlich sehr doof wenn sich hunderttausende Einträge in der DB befänden.
Nun dachte ich mir, ich mach das ganze mit einer MATCH AGAINST-Abfrage, bin mir aber nicht sicher ob das ein guter Weg ist.
Ich habe auch etwas weiter gesucht und folgende Seite gefunden: Case-Insensitive Suche in SQL
Darin steht, dass die DB (verständlicherweise) über LOWER oder UPPER gar nicht auf den INDEX zugreifen kann. Weiter unten wird auch eine Option mitgegeben wie man das Problem umschiffen kann.
CREATE INDEX emp_up_name ON employees (UPPER(last_name))
Leider meldet phpMyAdmin dauernd:
CREATE INDEX lower_username ON blub (LOWER(username))
MySQL meldet:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'username))' at line 1
Ich bin mit dieser Methode, die mir besser als MATCH AGAINST zu sein scheint, nicht in der LAge einen "lower_username" INDEX anzulegen welcher später die WHERE LOWER(username) Abfragen bedient.
Ein Paar Details:
Datenbank-Server
Server-Typ: MariaDB
Server-Version: 10.2.2-MariaDB-1~xenial-log - mariadb.org binary distribution
Protokoll-Version: 10
Server-Zeichensatz: UTF-8 Unicode (utf8)
Vielleicht findet sich hier jemand, der mir bei einem Problemchen helfen kann.
Ich habe für die User-Verwaltung ein paar Tabellen welche alle mit der id verknüpft sind.
Besuche ich nun ein Benutzerprofil, werden die Daten über den Usernamen geholt.
SELECT bla FROM blub WHERE LOWER(username) = ?
Auf username liegt ein FULLTEXT-INDEX welcher aber so nicht genutzt wird, EXPLAIN zeigt mir einen vollen Tabellenscan an, das wäre später natürlich sehr doof wenn sich hunderttausende Einträge in der DB befänden.
Nun dachte ich mir, ich mach das ganze mit einer MATCH AGAINST-Abfrage, bin mir aber nicht sicher ob das ein guter Weg ist.
Ich habe auch etwas weiter gesucht und folgende Seite gefunden: Case-Insensitive Suche in SQL
Darin steht, dass die DB (verständlicherweise) über LOWER oder UPPER gar nicht auf den INDEX zugreifen kann. Weiter unten wird auch eine Option mitgegeben wie man das Problem umschiffen kann.
CREATE INDEX emp_up_name ON employees (UPPER(last_name))
Leider meldet phpMyAdmin dauernd:
CREATE INDEX lower_username ON blub (LOWER(username))
MySQL meldet:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'username))' at line 1
Ich bin mit dieser Methode, die mir besser als MATCH AGAINST zu sein scheint, nicht in der LAge einen "lower_username" INDEX anzulegen welcher später die WHERE LOWER(username) Abfragen bedient.
Ein Paar Details:
Datenbank-Server
Server-Typ: MariaDB
Server-Version: 10.2.2-MariaDB-1~xenial-log - mariadb.org binary distribution
Protokoll-Version: 10
Server-Zeichensatz: UTF-8 Unicode (utf8)