|
来源: 作者:riechelr_hl |
|
逐渐了解SQL服务器以便能为你的问题使用可能最快的SQL构造并避免瓶颈。 优化表布局和查询。 使用复制以获得更快的选择(select)速度。 如果你有一个慢速的网络连接数据库,使用压缩客户/服务器协议。 不要害怕时应用的第一个版本不能完美地移植,在你解决问题时,你总是可以在以后优化它。 九、优化MySQL 挑选编译器和编译选项。 位你的系统寻找最好的启动选项。 通读MySQL参考手册并阅读Paul DuBios的《MySQL》一书。(已有中文版-译注) 多用EXPLAIN SELECT、SHOW VARIABLES、SHOW STATUS和SHOW PROCESSLIST。 了解查询优化器的工作原理。 优化表的格式。 维护你的表(myisamchk、CHECK TABLE、 OPTIMIZE TABLE) 使用MySQL的扩展功能以让一切快速完成。 如果你注意到了你把在很多场合需要某些函数,编写MySQLUDF函数。 不要使用表级或列级的GRANT,除非你确实需要。 购买MySQL技术支持以帮助你解决问题:) 十、编译和安装MySQL 通过位你的系统挑选可能最好的编译器,你通常可以获得10-30%的性能提高。 在Linux/Intel平台上,用pgcc(gcc的奔腾芯片优化版)编译MySQL。然而,二进制代码把只能运行在Intel奔腾CPU上。 对于一种特定的平台,使用MySQL参考手册上推荐的优化选项。 一般地,对特定CPU的原生编译器(如Sparc的Sun Workshop)应该比gcc提供更好的性能,但不总是这样。 用你把使用的字符集编译MySQL。 静态编译生成mysqld的执行文件(用--with-mysqld-ldflags=all-static)并用strip sql/mysqld整理最终的执行文件。 注意,既然MySQL不使用C++扩展,不带扩展支持编译MySQL把赢得巨大的性能提高。 如果操作系统支持原生线程,使用原生线程(而不用mit-pthreads)。 用MySQL基准测试来测试最终的二进制代码。 十一、维护 如果可能,偶尔运行一下OPTIMIZE table,这对大量更新的变长行非常重要。 偶尔用myisamchk -a更新一下表中的键码分布统计。记住在做之前关掉MySQL。 如果有碎片文件,可能值得把所有文件复制到另一个磁盘上,清除原来的磁盘并拷回文件。 如果遇到问题,用myisamchk或CHECK table检查表。 用mysqladmin -i10 precesslist extended-status监控MySQL的状态。 用MySQLGUI客户程序,你可以在不同的窗口内监控进程列表和状态。 使用mysqladmin debug获得有关锁定和性能的信息。 十二、优化SQL 扬SQL之长,其它事情交由应用去做。使用SQL服务器来做: 找出基于WHERE子句的行。 JOIN表 GROUP BY ORDER BY DISTINCT 不要使用SQL来做: 检验数据(如日期) 成为一只计算器 技巧: 明智地使用键码。 键码适合搜索,但不适合索引列的插入/更新。 保持数据为数据库第三范式,但不要担心冗余信息或这如果你需要更快的速度,创建总结表。 在大表上不做GROUP BY,相反创建大表的总结表并查询它。 UPDATE table set count=count+1 where key_column=constant非常快。 对于大表,或许最好偶尔生成总结表而不是一直保持总结表。 充分利用INSERT的默认值。 十三、不同SQL服务器的速度差别(以秒计) 通过键码读取2000000行: NT Linux mysql 367 249 mysql_odbc 464 db2_odbc 1206 informix_odbc 121126 ms-sql_odbc 1634 oracle_odbc 20800 solid_odbc 877 sybase_odbc 17614 插入350768行: NT Linux mysql 381 206 mysql_odbc 6
| |
阅读(779) | 评论(0) | 转发(0) |