BLOB/TEXT column 'colname' used in key specification without a key length

Genauer Fehler:

ERROR 1170 (42000): BLOB/TEXT column 'colname' used in key specification without a key length"

Lösung:

Länge der Spalte reduzieren, da MySQL nur den Anfang der Spalten als Key verwenden kann.

INSERT INTO <tabelle> (spalte1, spalte2, spalte3) VALUES('a','b', 'c')
ON DUPLICATE KEY UPDATE spalte2='blah';

Siehe auch:

  1. Tabelle anlegen. Diese muss als Type MyISAM haben; InnoDB funktioniert nicht
  2. Index vom Typ FULLTEXT über die Spalten anlegen, die von der Volltextsuche profitieren sollen. Wenn mehrere Spalten in einer Abfrage verwendet werden sollen, dann müssen diese in einem Index sein (also nicht pro Spalten einen Index anlegen). Sonst funktioniert die Abfrage nur über jeweils eine Spalte.
  3. Tabelle füllen.
  4. Abfrage starten:
SELECT * FROM search_index s WHERE MATCH (title, content) AGAINST ('searchphrase');

Weiterhin empfiehlt es sich, den Parameter ft_min_word_len = 3 in der my.cnf zu setzen, um eine minimale Suchwortlänge von 3 Zeichen zu haben. Danach mittels REPAIR TABLE table_name QUICK; den Index der betroffenden Tabellen neu erzeugen.

Connection Pooling im Apache Tomcat 6 via DBCP einrichten

Weiterlesen...

In /etc/mysql/my.cnf eintragen:

query_cache_limit = 1M
query_cache_size = 18M
query_cache_type = 1

query_cache_limit = max. Größe für einen einzelnen Query Aufruf, der in den Cache aufgenommen wird.

query_cache_size = Wie viel Speicher der gesamte Query-Cache belegen darf

query_cache_type = Query-Cache ein (1) der (0) ausschalten (2 per SQL aktivieren (SQL_CACHE) /deaktivieren (SQL_NO_CACHE) )

Dann in der MySQL-Konsole nachschauen ob der läuft:

SHOW STATUS LIKE 'Qcache%';

bzw.

show variables like '%cache%';