2017-05-07 11 views
0

ich eine einfache SELECT tun (versucht, mit und ohne LIMIT 1) ...MariaDB 10.1 einfach viele Sekunden große Datenbank SELECT

SELECT * FROM `links_db` WHERE `link` LIKE '__some_url__' ; // 9.45 sec 
SELECT * FROM `links_db` WHERE `link` LIKE '__some_url__' LIMIT 1 ; // 8 sec 
SELECT `link` FROM `links_db` WHERE `link` LIKE '__some_url__' ; // 5 sec 
SELECT `link` FROM `links_db` WHERE `link` LIKE '__some_url__' LIMIT 1 ; // 5 sec 

Aber das Problem ist, dass meine Datenbank 300 mb ... es dauert 5 Sekunden, um diese einzelne und einfache Aufgabe auszuführen ...

ich von MYSQL 5,5 bis MariaDB 10.1 aktualisiert, aber noch 5 Sekunden ...

gibt es eine Einstellung in my.cnf, die die SELECT schneller helfen könnten?

+0

Wie viele Zeilen ist Ihr Tisch? Haben Sie Indizes? Verwenden Sie ein '=', wenn Sie nach einer genauen Übereinstimmung suchen. Das scheint auch nicht mit PHP zu tun zu haben. – chris85

+0

Können Sie eine tatsächliche Anfrage stellen? – Strawberry

+0

die Tabelle hat 70 000 Zeilen ... mit = statt LIKE ist es 5 Sekunden statt 9 –

Antwort

0

Ich denke, etwas in my.cnf falsch war ...

ich alle Zeilen entfernt (lassen MariaDB haben sie eigene Standardwerte sind) außer die wenige:

[mysqld] 
performance-schema=1 
tmpdir=/home/tmp 
general_log=0 
slow_query_log=0 
innodb_file_per_table=1 
default-storage-engine=InnoDB 
innodb_buffer_pool_size=2000M 

und die SELECT geleitet von 9 Sekunden bis 140ms;)

0

(um viel für einen Kommentar)

300MB für 70K Zeilen.? Sie haben einige breite Spalten?

Ist die Spalte link indiziert?

Mal sehen SHOW CREATE TABLE.

Welche Einstellungen haben Sie entfernt? Wenn Sie viele Dinge blind auf einen hohen Wert gesetzt hätten, hätte das Performance-Probleme verursachen können - normalerweise durch das Auslöschen von RAM.

Wie viel RAM haben Sie? Wenn Sie keinen Index für link haben, werden alle diese Abfragen auf die gleiche Weise ausgeführt (siehe EXPLAIN). Die Tabelle wird gescannt, wobei jede für die LIKE überprüft wird. Wenn eine solche Zeile früh in der Tabelle ist, wird LIMIT 1 schnell beendet. (Also ich nehme an, dass es keine solche gab.) Mit SELECT * werden alle Spalten gesammelt; Das erfordert mehr Aufwand.

Nicht query_cache_size größer als 50M einstellen.

+0

Was meinst du mit "Ist Link-Indizes?" –

+0

@JohnR - Ich meine meine Finger manchmal fummeln. Ist diese Spalte indiziert? Bitte geben Sie 'SHOW CREATE TABLE links_db' an, damit wir das und andere Details sehen können. –

+0

die CREATE ist dies: CREATE TABLE 'links' ( ' link_id' int (255) unsigned NOT NULL AUTO_INCREMENT, 'link' Text COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (' link_id') ) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci; –

Verwandte Themen