->->-> [Query Cache
->-> Storage Cache/Buffer]
-> Festplatte
SHOW VARIABLES LIKE 'query_cache%'; Konfiguriert in der my.conf (Aufgabe des DBAs): # query cache query_cache_type = 1 // eingeschaltet query_cache_size = 25301231 // 25 MB Cache reserviert für den qc query_cache_limit = 253123 // max. 250 kb Resultsetgröße im Cache
show global status like 'qcache_%'; "Variable_name","Value" "Qcache_free_blocks","1" // freie Speicherblöcke im QC "Qcache_free_memory","722480" // freier Speicher für QS "Qcache_hits","201" // Treffer "Qcache_inserts","10" // Querys die in den QC hinzugefügt wurden "Qcache_lowmem_prunes","0" // Querys die Aufgrund des Speicherplatzes gelöscht wurden "Qcache_not_cached","5" // nicht gecachte oder cachebare Abfragen "Qcache_queries_in_cache","11" // gesamt Anzahl der Queries im QC "Qcache_total_blocks","121" // Anzahl der belegten Blöcke im QC
show status like 'innodb_buffer_pool%'; |Innodb... | .| |Innodb_buffer_pool_read_requests |349| |Innodb_buffer_pool_reads | 13|
SELECT *
FROM t1 FORCE INDEX(goodkey1,goodkey2)
WHERE (goodkey1 < 10 OR goodkey2 < 20)
AND badkey < 30;
MySQL> EXPLAIN SELECT * FROM avzmedien a where title ='MySQL'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: a
type: ALL
possible_keys:
key:
key_len:
ref:
rows: 234511
Extra: Using where
1 row in set (0.00 sec)
- hier wird ein Full Table Scan ausgeführt (type: ALL).
MySQL> EXPLAIN SELECT * FROM avzmedien a where title ='MySQL'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: a
type: ref
possible_keys: avz_title
key: avz_title
key_len: 14
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)
SELECT AVG(AGE) FROM USER GROUP BY CITYwird durch einen Index auf (city,age) schneller werden - allein schon durch die kürzeren Daten im Index die gescannt werden.
# User@Host: root[root] @ localhost [] # Query_time: 0.000652 Lock_time: 0.000109 Rows_sent: 1 Rows_examined: 1 SELECT id FROM avzmedien WHERE name='MySQL'; # User@Host: root[root] @ localhost [] # Query_time: 0.001943 Lock_time: 0.000145 Rows_sent: 0 Rows_examined: 0 INSERT INTO avzmedien (id, title,)VALUES(12,'MySQL');
SELECT i,pad FROM fact LEFT JOIN dim ON val=id WHERE i<10000 LIMIT 500000,10;besser:
SELECT i,pad
FROM (SELECT i,val
FROM fact
WHERE i<10000 LIMIT 500000,10) res
LEFT JOIN dim ON val=id;
(Faktor 10) so etwas sollte
irgendwann mal der Optimizer selbst hin bekommen so lange hilft nur
ausprobieren und messen....CREATE TEMPORARY TABLE t AS SELECT ... ALTER TABLE t ADD INDEX(...) SELECT ... FROM x JOIN t ON ... DROP TABLE t