MySQL 优化:优化 SQL 语句
跳到导航
跳到搜索
关于
数据库应用程序的核心逻辑是通过 SQL 语句执行的,无论是通过解释程序直接发出还是通过 API 在后台提交。
优化 SELECT 语句
优化子查询,派生表和视图引用
优化 INFORMATION_SCHEMA 查询
优化数据更改语句
优化数据库权限
权限设置越复杂,所有 SQL 语句的开销就越大。
简化由“GRANT”语句构建的权限,可使 MySQL 减少 Client 端执行语句时进行权限检查的开销。
- 例如,如果您不授予任何表级或列级权限,则服务器无需检查“tables_priv”和“columns_privt”表的内容。同样,如果您没有对任何帐户设置资源限制,则服务器不必执行资源计数。如果您有很高的语句处理负载,请考虑使用简化的授权结构以减少权限检查的开销。
其他优化技巧
本节列出了许多提高查询处理速度的技巧:
- 如果您的应用程序发出多个数据库请求以执行相关更新,则将这些语句组合到存储过程中可以帮助提高性能。同样,如果您的应用程序根据多个列值或大量数据计算单个结果,则将计算结果合并到 UDF(用户定义的函数)中可以提高性能。然后,产生的快速数据库操作可用于其他查询,应用程序,甚至可以用不同的编程语言编写的代码重用。
- 要解决 ARCHIVE 表出现的任何压缩问题,请使用“OPTIMIZE TABLE”。【???】
- 如果可能,将报告分类为“实时”或“统计”,其中仅根据从实时数据定期生成的汇总表中创建统计报告所需的数据。
- 如果您的数据与行和列的表结构不一致,则可以将数据打包并存储到BLOB列中。在这种情况下,您必须在应用程序中提供代码以打包和解压缩信息,但这可能会节省 I/O 操作,以读写相关值集。
- 对于 Web 服务器,将图像和其他二进制资产存储为文件,路径名存储在数据库中,而不是文件本身。大多数 Web 服务器比文件内容在缓存文件方面更胜一筹,因此使用文件通常更快。 (尽管在这种情况下,您必须自己处理备份和存储问题.)
- 如果您确实需要很高的速度,请查看底层的 MySQL 接口。例如,通过直接访问 MySQL InnoDB或MyISAM存储引擎,与使用 SQL 接口相比,您可以大大提高速度。
- 同样,对于使用NDBCLUSTER存储引擎的数据库,您可能希望研究 NDB API 的可能用法(请参阅MySQL NDB 群集 API 开发人员指南)。
- 复制可以为某些操作提供性能优势。您可以在副本之间分配 Client 端检索,以分散负载。为避免在进行备份时减慢源速度,可以使用副本进行备份。参见第 16 章,复制。