大家好,欢迎大家收看本文
对于初学者入门的学习,一些理论不容易理解或记住,所以本节课程【创新】采用了【正、反对比联想记忆】的方法,
引入模拟场景中的肖荏盖的小故事。(模拟场景为虚构演绎,仅供教学,不要对号入座,懂不懂?明白吗?)
【数据库的功能都是正向的,模拟场景中的肖荏盖做的事情都是反向的。】
3.Index-advisor索引推荐
索引推荐,顾名思义,通俗的说,就是电脑帮你选出来一些可以创建的索引,推荐给你,至于是否要创建这些索引,还得看你。
这里就要给大家举一个模拟场景的中的反向小故事,《芸芬若只如初见》
芸芬愁砚虽然是一家技术很low的公司,但是,其内部有一个小团体,叫做“芸芬海盗团”,芸芬海盗团全部成员,会在第一章的结尾给大家介绍
这里先介绍一位响当当的人物:李然哲,您别看这名字挺文气,这可是年级轻轻,就加入芸芬海盗团的一位臭名昭著的海盗,其恶行也加速了芸芬愁砚的衰落
那么这位李然哲,他到底做了什么人神共愤的事情,会导致加速了芸芬愁砚的衰落呢?
我们不知道李然哲是通过什么手段加入的芸芬海盗团,但是,我们知道了,李然哲对于他的手下,都做了什么事情。
芸芬愁砚,一般会定期发布招聘信息,这时就会有很多人去芸芬愁砚面试。
其中有一位,是擎天柱的朋友,殷天布,是一位技术不错的小伙子。
他去芸芬愁砚,在技术上很轻松就拿捏了面试官李然哲,李然哲从来没见过技术这么好的人还愿意去他们芸芬愁砚这种公司的,不由得心里一惊。
李然哲马上犯难了,这个人要是来了,早晚压他一头,可是技术这么好的人还愿意来芸芬愁砚这种公司的,真的是百里无一,怎么拒绝掉殷天布,成了一个难题。
思来想去,想不出来,那个时候,李然哲还是有心思提升技术的,还没有变得那么坏,还没有黑化到那种程度,这个时候同为芸芬愁砚海盗团的金水纹(此人及其心黑),就给李然哲出了个主意。
是什么主意,能让李冉哲辗转一夜未眠,才对殷天布说出口的呢?
毕竟当时李然哲还是要一些脸面的奶油小生,还没有经历过海盗团的暴风雨级黑心熏陶。
但是,李然哲思来想去,为了能立足于芸芬海盗团,也不得不这么做了。
“殷天布是吧,你的技术还不错,但是要进芸芬愁砚,可是有一个不成文的规定,你明白吗?”李然哲问道。
“不明白”,殷天布一脸疑惑的电话里说道。
“你得会办事,老弟弟,你侄子下个月过生日,就在你入职第一个月时,你得来参加生日晚宴啊,但是我估计你到时候很可能项目太忙,来不了,你放心,我会打包一份给你叫闪送送过去的,但是你得明白我的意思啊”李冉哲说这话时,脸已经通红的像抹了辣椒一样。可见此时李然哲尚存良知。
“什么,还有这种说法,那我是不是得意思意思?”殷天布作为一个技术人员,双方这个话已经说得很明了。
“我给你发一个数字,你就准备一下吧,如果你觉得可以接受的话,我可以立刻推荐你入职芸芬愁砚”李冉哲说道。此时,他那火辣辣的脸庞,已经逐渐降温,逐渐恢复了正常。
“这么多,那还是算了吧,不去芸芬愁砚了”殷天布愤怒的回道,“你还是别推荐了,哼”
所以,技术好的人,都被金水纹、李然哲这种人挡在了门外,那么芸芬愁砚上市失败,甚至遭遇滑铁卢,也是罪有应得了。
所以提醒大家,不要向模拟场景中的芸芬愁砚和肖荏盖全家学习。
言归正传
3.1 索引提供指向存储在表的指定列中的数据值的指针,如同图书的目录,能够加快表的查询效率;
3.2 Index-advisor索引推荐的功能,共包含三个子功能:
3.2.1 单query索引推荐
单query索引推荐
1> 单query索引推荐功能支持用户在数据库中直接进行操作,单query索引推荐功能基于查询语句的语义信息和数据库的统计信息,对用户输入的单条查询语句生成推荐的索引。
2> 单query索引推荐功能涉及的函数接口
函数名:gs_index_advise
参数:SQL语句字符串
功能:针对单条查询语句生成推荐索引
使用方法:select * from gs_index_advise('select a from gaiem_sfq where b=42');
3.2.2 虚拟索引
虚拟索引
虚拟索引功能支持用户在数据库中直接进行操作,虚拟索引功能将模拟真实索引的建立,避免真实索引创建所需的时间和空间开销,
用户基于虚拟索引,可通过优化器评估该索引对指定查询语句的代价影响。
是否开启虚拟索引功能,通过参数enable_hypo_index设定。
虚拟索引功能涉及的系统函数接口有:
1> hypopg_create_index;创建虚拟索引
2> hypopg_display_index;显示所有创建的虚拟索引信息
3> hypopg_drop_index;删除指定的虚拟索引
4> hypopg_reset_index;清除所有虚拟索引
5> hypopg_estimate_size;估计指定索引创建所需的空间大小
使用方法:
select * from hypopg_create_index('create index on t1(x)');
explain select y from t1 where x=10;
set enable_hypo_index=on;
explain select y from t1 where x=10;
通过对比两个执行计划,可以分析出该索引是否会降低指定查询语句的执行代价,从而考虑是否创建对应的真实索引
3.2.3 workload级别索引推荐
workload级别索引推荐
对于workload级别索引推荐,用户可通过运行数据库外的脚本使用此功能,
该功能将包含有多条DML语句的workload作为输入,最终生成一批可对整体workload的执行表现进行优化的索引。
workload级别索引推荐使用前提:
1> 数据库状态正常、客户端能够正常连接
2> 当前执行用户下安装有gsql工具,该工具路径已被加入到PATH环境变量中
3> 具备python 3.6+的环境
使用步骤
1> 准备好包含有多条DML语句的文件作为输入的workload,文件中每条语句占据一行。
2> 用户可从数据库的离线日志中获得历史的业务语句。
运行python脚本index_advisor_workload.py,命令如下:
python index_advisor_workload.py [p PORT][d DATABASE][f FILE][--h HOST]
[-U USERNAME][-W PASSWORD][--max_index_num MAX_INDEX_NUM][--multi_iter_mode]
示例
python index_advisor_workload.py 6001 posgtres GaiemSfq.txt --max_index_num 10 --multi_iter_mode