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