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