【GreatSQL优化器-08】statistics和index dives

打印 上一主题 下一主题

主题 837|帖子 837|积分 2511

【GreatSQL优化器-08】statistics和index dives

一、statistics和index_dives介绍

GreatSQL的优化器对于查询条件带有范围的环境,需要根据 mm tree 来估计该范围内大概有多少行,然后以此来盘算cost。对于等号条件,给出了两种方法来估计对应行数--Statistics和index dives,前者不精确后者精确,可以通过体系变量eq_range_index_dive_limit设置阈值来决定用哪种方法来估计等号条件的行数。对于一条查询 SQL 假如等号条件太多的时候执行index dives会占用较多资源,这时候设置一个合理的阈值改为统计值估计可以有用制止占用过多资源,提升执行效率。
名称定义阐明Statistics用统计值来估计等号条件的行数,不精确意味着SKIP_RECORDS_IN_RANGE模式,盘算方式: rows = table->key_info[keyno].records_per_key()index dives精确盘算等号条件的行数意味着RECORDS_IN_RANGE,盘算方式: rows = this->records_in_range()下面用一个简单的例子来阐明index dives是什么:
[code]greatsql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT,date1 DATETIME);greatsql> INSERT INTO t1 VALUES (1,10,'2021-03-25 16:44:00.123456'),(2,1,'2022-03-26 16:44:00.123456'),(3,4,'2023-03-27 16:44:00.123456'),(5,5,'2024-03-25 16:44:00.123456'),(7,null,'2020-03-25 16:44:00.123456'),(8,10,'2020-10-25 16:44:00.123456'),(11,16,'2023-03-25 16:44:00.123456');greatsql> CREATE TABLE t2 (cc1 INT PRIMARY KEY, cc2 INT);greatsql> INSERT INTO t2 VALUES (1,3),(2,1),(3,2),(4,3),(5,15);greatsql> CREATE TABLE t3 (ccc1 INT, ccc2 varchar(100));greatsql> INSERT INTO t3 VALUES (1,'aa1'),(2,'bb1'),(3,'cc1'),(4,'dd1'),(null,'ee');greatsql> CREATE INDEX idx1 ON t1(c2);greatsql> CREATE INDEX idx2 ON t1(c2,date1);greatsql> CREATE INDEX idx2_1 ON t2(cc2);greatsql> CREATE INDEX idx3_1 ON t3(ccc1);greatsql> SELECT * FROM t1 WHERE (c1=4 AND c2
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

温锦文欧普厨电及净水器总代理

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表