二级索引表,在对原始表进行数据增加时,耗时增加。
没有建立二级索引表时,耗时:
1.7分钟
4.8分钟
建立了9个简单的二级索引表,耗时:
5.6分钟
43分钟
10分钟
16.4分钟
从上面的实验结果,可以很明显看出耗时增加了好几倍。
但是页面存在多条件的查询,确实需要这些索引表。那我们是否有办法减少索引表数量呢?
T_EXTENSION_ALL_DATAS表的row key是:LOGIN_DATE 与 SEQ_ID
其中有这,3种查询条件:
date country camsite toy
date country camsite
date country
创建二级索引:
CREATE INDEX IDX_T_EXTENSION_ALL_DATAS_COUNTRY_SITE_TOY ON T_EXTENSION_ALL_DATAS(LOGIN_DATE,COUNTRY,CAM_SITE,TOY);
正常来说这3中查询条件,上面这索引就能够搞定了。但是如果需要排序呢?
如果存在使用seq_id排序,正序、倒序。那么这个索引就无法满足要求。(难道我们要由1个索引表,改成3个索引表???)
select seq_id from T_EXTENSION_ALL_DATAS where login_date='2018-11-24' and country='China' and cam_site='aaa' and toy='cat' and seq_id>0 order by seq_id desc limit 1;
select seq_id from T_EXTENSION_ALL_DATAS where login_date='2018-11-24' and country='China' and cam_site='aaa' and seq_id>0 order by seq_id desc limit 1;
select seq_id from T_EXTENSION_ALL_DATAS where login_date='2018-11-24' and country='China' and seq_id>0 order by seq_id desc limit 1;
其实我们可以删除上面创建的那张二级索引表,我们不用phoenix的二级索引表。(没看错,就是不用phoenix的二级索引表。)
比较适合,只有新增数据,没有修改数据的场景,而查询条件又很多的情况:
思路:
1、自定义二级索引表,插入主表数据的同时,同时插入相关数据进入自定义的二级索引表。
2、根据查询条件的情况,判断查询哪个自定义表。
3、自定义表会查出一个seq_id,或者uuid。
4、使用seq_id,去主表查出最终结果,因为主表的row key就是seq_id,所以呢很快。