第八章 优化(三十二)—— 优化数据库权限和其他优化提示
8.2 优化SQL语句
8.2.6 优化数据库权限
权限设置越复杂,适用于所有SQL语句的开销就越大。简化GRANT
语句所建立的权限使MySQL能够减少客户端执行语句时的权限检查开销。例如,如果不设置任何表级或列级权限,则服务器就不需要检查tables_priv
和column_priv
表的内容。类似地,如果没有对任何帐户设置资源限制,服务器就不必执行资源计数。如果语句处理负载很高,请考虑使用简化的授权结构来减少权限检查开销。
8.2.7 其他优化提示
本节列出了一些提高查询处理速度的杂项技巧:
-
如果应用程序向多个数据库发出请求以进行相关更新,则把该语句合并到存储过程中有助于性能提升。类似地,如果应用程序基于多个列值或巨大数据量进行单值结果的计算,则把该计算合并到可加载的函数中有助于性能提升。由此产生的快速数据库操作可供其他查询、应用程序甚至用不同编程语言编写的代码中加以重用。更详细的信息,参见第25.2节MySQL的“使用存储过程”和添加函数。
-
若要修复
ARCHIVE
(归档)表时出现的任何压缩问题,请使用OPTIMIZE TABLE
。参见16.5节,“归档存储引擎”。 -
如果可能,将报告分类为“实时”或“统计”,其中统计报告所需的数据仅创建于实时数据定期生成的汇总表。
-
如果数据不符合行-列表结构,则可以将数据打包并存储到
BLOB
列中。在这种情况下,您必须在应用程序中提供用于打包和解包信息的代码,但这可能会节省I/O操作,以便读取和写入相关值集。 -
对于Web服务器,将图像和其他二进制资源存储为文件,只是把路径名存储在数据库中,而不存储文件本身。大多数Web服务器在缓存文件方面比缓冲数据库内容做得更好,因此使用文件通常更快(但在这种情况下,您必须自己处理备份和存储问题)。
-
如果您真的需要更高的速度,则查看底层的MySQL接口。例如,通过直接访问MySQL InnoDB或MyISAM存储引擎,可以获得比使用SQL接口更大的速度提升。
类似地,对于使用NDB集群存储引擎的数据库,你可能希望研究使用NDB应用程序接口的可能性(参见MySQL NDB集群API开发指南)。 -
复制可以为某些操作提供性能优势。您可以将客户端检索分发到多个副本中,以分散负载。为了避免在进行备份时减慢源数据库的速度,可以使用副本进行备份。参见第17章,复制。