每個 MyISAM 表開啟實例使用一個索引檔 + 一個資料檔。同一表被兩執行緒使用或單查詢用兩次時,共享索引檔但開啟獨立資料檔實例。快取滿且全在用時臨時擴大,下一個釋放的表會被關閉。檢查 Opened_tables 狀態值,過高則需增大 table_cache。
SELECT HIGH_PRIORITY、INSERT LOW_PRIORITY)AUTO_INCREMENTREPLACE (REPLACE INTO table VALUES (...))INSERT DELAYEDLOAD DATA INFILE / LOAD_FILE()INSERT 一次插入多行SELECT INTO OUTFILELEFT JOIN, STRAIGHT JOINLEFT JOIN ... IS NULL 優化ORDER BY 某情況下用鍵值LIMIT (SELECT ... LIMIT 10,20, DELETE ... LIMIT 10)foo IN (常數列表) 高度優化GET_LOCK()/RELEASE_LOCK()LOCK TABLESINSERT 和 SELECT 可同時運行CREATE TEMPORARY TABLECREATE TABLE ... SELECTDELAY_KEY_WRITE使用索引場景:
WHERE key_part1 = 1 AND key_part2 > 10WHERE key_part1 = 1 AND key_part2 LIKE 'prefix%'WHERE key_part1 > 1 AND key_part1 < 90不使用索引場景:
= 搜尋所有鍵值部分ORDER BYWHERE key_part2 = 1LIKE 以通配符開頭:WHERE key_part1 LIKE '%jani%'WHERE key_part1 = # ORDER BY key2每條覺得慢的查詢必跑 EXPLAIN!
mysql> EXPLAIN SELECT t3.DateOfAction, t1.TransactionID
-> FROM t1 JOIN t2 JOIN t3
-> WHERE t2.ID = t1.TransactionID AND t3.ID = t2.GroupID
-> ORDER BY t3.DateOfAction, t1.TransactionID;
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
| t1 | ALL | NULL | NULL | NULL | NULL | 11 | Using temporary; Using filesort |
| t2 | ref | ID | ID | 4 | t1.TransactionID | 13 | |
| t3 | eq_ref | PRIMARY | PRIMARY | 4 | t2.GroupID | 1 | |
+-------+--------+---------------+---------+---------+------------------+------+---------------------------------+
ALL 和 range 類型提示潛在問題。
發現正在執行什麼:
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
| 6 | monty | localhost | bp | Query | 15 | Sending data | SELECT * FROM station, station AS s1|
| 8 | monty | localhost | | Query | 0 | | SHOW PROCESSLIST |
+----+-------+-----------+----+---------+------+--------------+-------------------------------------+
在 mysql 或 mysqladmin 中用 KILL 終止失控執行緒。