本节列出了一些提高查询处理速度的杂项技巧
如果您的应用程序发出多个数据库请求来执行相关的更新,则将这些语句组合到一个存储例程中可以提高性能。类似地,如果您的应用程序根据多个列值或大量数据计算单个结果,则将计算组合到可加载函数中可以提高性能。然后,其他查询、应用程序,甚至使用不同编程语言编写的代码都可以重复使用生成的快速数据库操作。有关更多信息,请参见 第 27.2 节,“使用存储例程” 和 向 MySQL 添加函数。
要解决
ARCHIVE
表中出现的任何压缩问题,请使用OPTIMIZE TABLE
。请参见 第 18.5 节,“ARCHIVE 存储引擎”。如果可能,请将报表分类为““实时”” 或““统计””,其中统计报表所需的数据仅从定期从实时数据生成的汇总表中创建。
如果您的数据与行和列表结构不符,则可以将数据打包并存储到
BLOB
列中。在这种情况下,您必须在应用程序中提供代码来打包和解压缩信息,但这可能会节省读取和写入相关值集的 I/O 操作。对于 Web 服务器,请将图像和其他二进制资产存储为文件,并将路径名存储在数据库中,而不是存储文件本身。大多数 Web 服务器在缓存文件方面优于缓存数据库内容,因此使用文件通常速度更快。(尽管在这种情况下,您必须自己处理备份和存储问题。)
如果您需要非常高的速度,请查看低级 MySQL 接口。例如,通过直接访问 MySQL
InnoDB
或MyISAM
存储引擎,与使用 SQL 接口相比,您可以获得显着的速度提升。类似地,对于使用
NDBCLUSTER
存储引擎的数据库,您可能希望研究 NDB API 的可能用途(请参见 MySQL NDB 集群 API 开发人员指南)。复制可以为某些操作带来性能优势。您可以在副本之间分发客户端检索以分散负载。为了避免在进行备份时降低源的速度,您可以使用副本进行备份。请参见 第 19 章,“复制”。