今天遇见一个问题:
大家都知道一件事:没索引的数据库基本上查不了大数据。
比如说:有条数据有20亿条数据。然后查询某个数据,如果这个数据上没有索引,当场GG。
我们这边创建了一个索引,是按照时间进行索引的。按照时间进行文件分区。
比如说:一日的数据存在一个文件中,下一个日的数据存在下一个文件分区。查询的时候首先定位到:时间点,然后通过时间点定位到磁盘空间,查询该空间。
我觉得这个人是个人才。
核心要点:
1.磁盘空间要连续,不要碎片化。
2.数据的空间储存要连续,不要在两个数据之间插入数据(使用自增索引)
3.建立可靠的索引,保证所有查询都走索引。
4.尽量减少单表的大小,比如一个月数据一个表,超过一个月的放在另外一个表。
5.加钱买更好的硬盘和SSD。
6.通过hash索引提高查询速度。
7.拒绝跨时间区间大的数据查询。
8.自动查杀查询时间过长的SQL,保证绝大多数用户可靠连接。
但是今天有个问题:跨文件查询。
比如说:我既然是以一个周作为粒度分文件,那么如果我要查询三个月内按照XX参数的文件进行统计,请问怎么办?
一次要跨90个文件分区,就是索引文件跨度是一日的90倍。
比如说:查询当天的300个数据,这个很容易。
查询一年内的300个数据,基本上GG。
有自增索引,但是没有用:基本上自增和时间是完全一致的。
但是按照开发的说法,似乎是文件以日作为分区,文件已经分好了。
只能对应SQL创建对应的索引。一个SQL一个索引,而且必须是hash索引,不然基本上挂了。
有大佬解决一下这个问题,我自己反正是没啥办法。
更新:同事也和我一个逻辑,哈希索引……
今天开发正在创建索引……但是可能有几十亿的数据,创建索引是不是会卡死?这个我不太确定。
这么有风险的事情交给同事做……自己划水就OK了。