通过对比Oracle、SQL Server、PostgreSQL和
MySQL解决预备语句的方法,我们更好的了解到MySQL如何以数据库性能为出发点进行工作的。
通常,预备语句的方式有两种:服务器端和客户端。
服务器端预备语句
服务器端预备语句是最常见的形态,它需要两个数据回路:
- 驱动程序提出一个预处理请求,数据库将在查询树种分析语句,并可以将其转化为预优化树结构。没有绑定参数值的执行计划将被推迟,直到请求被处理。
- 数据库使用绑定当前参数值的执行请求将分析树转化为优化的执行计划。执行人采用该计划,并建立相关的结果集。
如果数据库不进行预备语句的缓存,额外的数据回路将会影响性能。为此,一些数据库系统不默认执行服务器端的预备语句,而是执行客户端的预备语句。
为了使服务器端的预备语句可行,必须启用useServerPrepStmts属性。
客户端预备语句
在客户端的预备语句,绑定参数标记将先于实际参数发送到数据库服务器。这样,驱动程序就可以通过单个请求来获取结果集。
缓存语句
在高性能的OLTP系统中,语句缓存在缓解处理延迟中起到了非常重要的作用。为了避免多次准备一个语句,MySQL驱动程序提供了客户端的语句缓存。默认状态下被禁用,可以使用cachePrepStmtsConnection属性激活该功能。
对于客户端的语句,被标记的语句结构可以在不同的预备语句调用中使用。绑定了一个数据库连接的缓存,当使用一个连接池时,物理接连周期将跨过多个应用级事物处理时间(所以缓存会为频繁执行语句提供便利)。
对于服务器端的语句,驱动程序对服务器端预备语句进行缓存,同样还有服务器端语句支持的缓存(并非所有语句都可以在服务器端进行预处理)。
总之,缓存语句对应用程序性能有显著影响。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。