MySQL 性能提示
来源:互联网 发布:java 路由器端口扫描 编辑:程序博客网 时间:2024/04/28 14:25
这里罗列了一些基本的 MySQL 性能提示,但不是放之四海而皆准,需要根据实际的应用情况而决定。
【设计】
- 使用标准化设计(数据库三范式),记住表的联合查询(join)性能不会差
- 选择合适的字符集,虽然UTF16无所不能,但需要两倍的存储;UTF8适合各种字符,但比latin1慢,尽可能选用latin1(此条不适合中文)
- utf8_general_ci 略快于 utf8_unicode.ci
- 字段尽可能使用 NOT NULL
- 为所有的 SELECT 查询创建索引
- 索引提升查询的性能,但降低插入数据的性能,因此不要做无用的和重复的索引
【查询】
- 尽可能使用最小的数据类型,例如一些状态字段用 tinyint 而不是 int
- 尽可能避免 IN (…) 查询
- 尽可能避免 ORDER BY RAND() 查询
- 当你需要在一些唯一索引的表中插入数据前使用 SELECT 进行判断记录是否存在时,请使用 INSERT … ON DUPLICATE KEY UPDATE … 方法来替代.
- 如果你的应用需要经常写数据库,那么请使用 InnoDB 引擎,否则用 MyISAM,这里有一个比较的文章。
- 不要在大表中使用 LIMIT xxxx1, xxxx2 ,特别是当 xxxx1 参数值特别大的时候,可尽量通过 WHERE 来限制结果集,然后使用 LIMIT xxxx2 方式.
- 不使用已被废弃的方法
- 避免在 LIKE 查询中使用 % 前缀,例如 LIKE '%oschina' ,这将使索引无效
- 如果有大量的数据需要一次性插入,最好对这些 INSERT 语句进行合并以便批量插入
- Prefer GROUP BY over DISTINCT.
- 经常浏览系统的慢查询日志 Slow Query Log.
- 避免在 WHERE … , LIMIT … , ORDER BY … 等语句中使用表达式和函数计算公式等。
- 使用 EXPLAIN … 对你的 SQL 查询进行分析,以便确认是否最优查询
- 不要使用 SELECT * … ,只 SELECT 你想要的字段(这点挺麻烦,在 ORM 世界里更是这样)
- 尽可能合并小查询为一个大查询
【存储引擎】
- 了解各种存储引擎的特点,并根据实际情况进行选择,选择之前在测试平台上做充分测试
- Archive old data such as logs in ARCHIVE tables or MERGE tables.
- BLACKHOLE 引擎非常快速,特别适用一些繁忙的事务,例如日志
【配置my.cnf】
- 提供默认的主键缓冲区大小: key_buffer = 128M
- 提高默认的打开表的缓存个数: table_cache = 128
- 提供默认的排序缓冲区大小:
sort_buffer_size = 32M
myisam_sort_buffer_size = 32M - 如果不做复制的话,禁用二进制日志:# log-bin=mysql-bin
- MySQL 性能提示
- 性能微调提示
- InnoDB性能调节提示
- WP7 性能提示
- SQL*Loader性能提示
- InnoDB性能调节提示
- Android 性能优化提示
- 提示Android APP性能
- scala 性能提示
- Mysql 性能
- mysql性能
- mysql性能
- mysql 性能
- mysql性能
- MySQL 性能
- mysql性能
- mysql性能
- mysql性能
- Linux程序设计入门--线程操作
- js多文件上传框
- vs2010 连接vss2005源码管理器
- Linux实用操作日记
- oracle 存储过程语句总结
- MySQL 性能提示
- MVC 过滤器Filter
- iPad五大另类功能:解决孩子哭闹等问题
- C语言预处理
- 最终版 Android 3.0 平台和 SDK 工具更新
- Userinit.exe
- 警告对话框AlertDialog的使用
- Windows 7下VS2008破解90天限制的激活升级方法(支持简体中文,英文,繁体中文)
- 格式化I/O函数