本节列出了一些提高查询处理速度的杂项技巧
如果您的应用程序发出多个数据库请求来执行相关的更新,则将这些语句组合到存储例程中可以提高性能。同样,如果您的应用程序根据多个列值或大量数据计算单个结果,则将计算组合到可加载函数中可以提高性能。然后,其他查询、应用程序,甚至用不同编程语言编写的代码都可以重用生成的快速数据库操作。有关更多信息,请参阅第 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 章“复制”。