logo
Database Design

SQL 调优

SQL 调优与索引策略

SQL 调优是一个范围很广的话题,有很多相关的可以作为参考。

利用基准测试performance 分析来模拟和发现系统瓶颈很重要。

  • 基准测试 - 用 ab 等工具模拟高负载情况。
  • performance 分析 - 通过启用如慢查询日志等工具来辅助追踪 performance 问题。

基准测试和 performance 分析可能会指引你到以下优化方案。

改进模式
  • 为了实现快速访问,MySQL 在磁盘上用连续的块存储数据。
  • 使用 CHAR 类型存储固定长度的字段,不要用 VARCHAR
    • CHAR 在快速、随机访问时效率很高。如果使用 VARCHAR,如果你想读取下一个字符串,不得不先读取到当前字符串的末尾。
  • 使用 TEXT 类型存储大块的文本,例如博客正文。TEXT 还允许布尔搜索。使用 TEXT 字段需要在磁盘上存储一个用于定位文本块的指针。
  • 使用 INT 类型存储高达 2^32 或 40 亿的较大数字。
  • 使用 DECIMAL 类型存储货币可以避免浮点数表示错误。
  • 避免使用 BLOBS 存储实际对象,而是用来存储存放对象的位置。
  • VARCHAR(255) 是以 8 位数字存储的最大字符数,在某些关系型 database 中,最大限度地利用字节。
  • 在适用场景中设置 NOT NULL 约束来提高搜索 performance
使用正确的索引
  • 你正查询(SELECTGROUP BYORDER BYJOIN)的列如果用了索引会更快。
  • 索引通常表示为自平衡的 B 树,可以保持数据有序,并允许在对数时间内进行搜索,顺序访问,插入,删除操作。
  • 设置索引,会将数据存在内存中,占用了更多内存空间。
  • 写入操作会变慢,因为索引需要被更新。
  • 加载大量数据时,禁用索引再加载数据,然后重建索引,这样也许会更快。
避免高成本的联结操作
  • 有 performance 需要,可以进行非规范化。
分割数据表
  • 将热点数据拆分到单独的数据表中,可以有助于 cache。
调优查询 cache
来源及延伸阅读

相关练习题

SQL 调优

暂无相关练习题