数据库

mysql数据库的优化(9)

二十五、MySQL应避免的事情
用删掉的行更新或插入表,结合要耗时长的SELECT。
在能放在WHERE子句中的列上用HAVING。
不使用键码或键码不够唯一而进行JOIN。
在不同列类型的列上JOIN。
在不使用=匹配整个键码时使用HEAP表。
在MySQL监控程序中忘记在UPDATE或DELETE中使用一条WHERE子句。如果想这样做,使用mysql客户程序的–i-am-a-dummy选项。
二十六、MySQL各种锁定
内部表锁定
LOCK TABLES(所有表类型适用)
GET LOCK()/RELEASE LOCK()
页面锁定(对BDB表)
ALTER TABLE也在BDB表上进行表锁定
LOCK TABLES允许一个表有多个读者和一个写者。
一般WHERE锁定具有比READ锁定高的优先级以避免让写入方干等。对于不重要的写入方,可以使用LOW_PRIORITY关键字让锁定处理器优选读取方。
UPDATE LOW_PRIORITY SET value=10 WHERE id=10;
二十七、给MySQL更多信息以更好地解决问题的技巧 注意你总能去掉(加注释)MySQL功能以使查询可移植:
SELECT /*! SQL_BUFFER_RESULTS */ …
SELECT SQL_BUFFER_RESULTS …
将强制MySQL生成一个临时结果集。只要所有临时结果集生成后,所有表上的锁定均被释放。这能在遇到表锁定问题时或要花很长时间将结果传给客户端时有所帮助。
SELECT SQL_SMALL_RESULT … GROUP BY …
告诉优化器结果集将只包含很少的行。
SELECT SQL_BIG_RESULT … GROUP BY …
告诉优化器结果集将包含很多行。
SELECT STRAIGHT_JOIN …
强制优化器以出现在FROM子句中的次序联结表。
SELECT … FROM table_name [USE INDEX (index_list) | IGNORE INDEX (index_list)] table_name2
强制MySQL使用/忽略列出的索引。


mysql数据库的优化(8)

二十二、学会使用SHOW PROCESSLIST
使用SHOW processlist来发现正在做什么:
+—-+——-+———–+—-+———+——+————–+————————————-+
| 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数据库的优化(7)

十九、MySQL扩展/优化-提供更快的速度
使用优化的表类型(HEAP、MyIASM或BDB表)。
对数据使用优化的列。
如果可能使用定长行。
使用不同的锁定类型(SELECT HIGH_PRIORITY,INSERT LOW_PRIORITY)
Auto_increment
REPLACE (REPLACE INTO table_name VALUES (…))
INSERT DELAYED
LOAD DATA INFILE / LOAD_FILE()
使用多行INSERT一次插入多行。
SELECT INTO OUTFILE
LEFT JOIN, STRAIGHT JOIN
LEFT JOIN ,结合IS NULL
ORDER BY可在某些情况下使用键码。
如果只查询在一个索引中的列,将只使用索引树解决查询。
联结一般比子查询快(对大多数SQL服务器亦如此)。
LIMIT
SELECT * from table1 WHERE a > 10 LIMIT 10,20
DELETE * from table1 WHERE a > 10 LIMIT 10
foo IN (常数列表) 高度优化。
GET_LOCK()/RELEASE_LOCK()
LOCK TABLES
INSERT和SELECT可同时运行。
UDF函数可装载进一个正在运行的服务器。
压缩只读表。
CREATE TEMPORARY TABLE
CREATE TABLE .. SELECT
带RAID选项的MyIASM表将文件分割成很多文件以突破某些文件系统的2G限制。
Delay_keys
复制功能
二十、MySQL何时使用索引
对一个键码使用>, >=, =, 1 and key_part1 < [...]