限制查询中记录的估计¶
此功能是一个技术预览版。在生产中使用此特性之前,我们建议您在环境中测试从物理备份恢复生产,并使用替代备份方法实现冗余。
本页描述了在对大量表分区运行查询时的一种替代方法。当查询运行时,InnoDB估计每个分区中的记录。如果缓冲池必须从磁盘读取页面,这个过程可能会导致更多的页面读取和更多的磁盘I/O。如果有大量的分区,这个过程会增加查询时间。
添加两个变量使重写成为可能records_in_range这有效地绕过了这个过程。
警告
使用这些变量可能会导致优化器选择不恰当的索引。
innodb_records_in_range¶
| 选项 | 描述 |
|---|---|
| 命令行: | ——innodb-records-in-range |
| 范围: | 全球 |
| 动态: | 是的 |
| 数据类型: | 数字 |
| 默认的 | 0 |
这些变量是技术预览版。在生产中使用这些变量之前,我们建议您在环境中测试从物理备份恢复生产,并使用备用备份方法实现冗余。
该变量提供了一种方法来限制为查询估计的记录数量。
mysql >集@@GLOBAL.innodb_records_in_range=One hundred.;One hundred.
innodb_force_index_records_in_range¶
| 选项 | 描述 |
|---|---|
| 命令行: | ——innodb-force-index-records-in-range |
| 范围: | 全球 |
| 动态: | 是的 |
| 数据类型: | 数字 |
| 默认的 | 0 |
这些变量是技术预览版。在生产中使用这些变量之前,我们建议您在环境中测试从物理备份恢复生产,并使用备用备份方法实现冗余。
当在查询中使用FORCE INDEX时,此变量提供了一种重写records_in_range结果的方法。
mysql >集@@GLOBAL.innodb_force_index_records_in_range=One hundred.;One hundred.
使用favor_range_scan优化器开关¶
此功能是一个技术预览版。在生产中使用此特性之前,我们建议您在环境中测试从物理备份恢复生产,并使用替代备份方法实现冗余。
在特定的场景中,优化器选择扫描表,而不是使用范围扫描。条件如下:
表中包含大量行
由两个或多个列组成的复合主键
WHERE子句包含多个范围条件
的optimizer_switch控制优化器行为。favor_range_scan开关可以任意地将范围扫描的成本降低10倍。
可选值包括:
在
(默认)
默认的
mysql >集optimizer_switch=' favor_range_scan =“;
最近更新:2023-01-12