请问 sqlserver.oracle等大数据库,千万级别以上的数据表怎么优化查询?
除了分库 分表, 读写分离外
那就只可能做索引+缓存
然后再就建视图,然后给视频加索引与缓存
分库 分表, 读写分离
1.加索引
2.不要使用like来模糊匹配字段
把这些字段 同步到es或者第三方 比如阿里云tablestore来查询
3.联表的数据不要超过三张
如果还是不行,需要定期把哪些老数据迁移,保证表的数据在1kw以内。
后台分页 ,使用缓存机制
sql server 略有压力,但是Oracle应对千万级是毫无压力的。
面对单表,建索引就ok了。
面对多表,建索引能解决80%的问题,剩下的20%的问题不太好解决,因为不是所有字段都好建索引的,也不是所有的联接都能会被索引提升效率的。这时候就建物化视图,就ok了。
对于添加索引和物化视图也解决不了的问题,也是有的,比如用户就是要求对五个字段进行like查询,并且要求'%xxx%'这种,就导致无法走索引,这种情况,需要优化表结构以及查询逻辑,比如,将某个字段追加一个镜像字段,它的字符串同原字段里面的字符串相反,查询 的时候,分别用'abc%'和'cba%'来作为这两个字段的like条件。其它还有好多相应的方法。
千万级别以上建议换方案了
比如阿里自研的Oceanbase