各位大佬有什么好的思路吗?一个面试题。
给出一些优化方案。。。。。。。。谢谢
这个问题我们当时也有一个800万条数据的数据库, 解决方案是把数据库按字母分成24个小表并设计了相关索引,
做了一个查询接口先分析客户的首字母然后指向相应的数据表,效果特别理想。(特别提醒:汉字用拼音首字母分组)
再大一点就要考虑数据库分服务器,然后做一个服务器数据交换接口,由服务器分散客户负载,减轻服务器压力。
基本思路:拆分大库变小库。做应用端接口引导。
索引了解一下,结合查询各条件合理建立
建立索引,where 索引=“”这样会触发索引,不要写成where""=索引
另外明知道只查一条数据可以用limit 1
详细请参考https://mp.weixin.qq.com/s?__biz=MzUxOTAxODc2Mg==&mid=2247483903&idx=1&sn=5d0d59181f190cf446d80e703ed6895e&chksm=f981419acef6c88c643e359a9f084793feee1ab60855ffaf24952fcf7952516eb48641b72d5c&scene=21#wechat_redirect
1、百万,千万级别数据库,大表要做分区,提高sql查询效率
2、建立查询条件索引,提升sql执行效率
再不分库分表的情况下,合理创建索引,再尽可能多的提供where条件缩小查询范围
百万或千万级别数据库,1,可以进行数据库分区管理,按某个字段 (例如区域/时间)进行分区,,2,如果数据库已经建成了,可以建字段索引,有单字段索引也有多个字段的索引,来进行优化
说的很含糊,无非就是索引、执行计划,索引列少用函数,避免全表扫描。
首先,你要清楚你所要查询的表的数据结构,说白了就是这张表,你可以从哪几个字段来确定一条数据,字段越少越好。
比如说保险公司的数据,有一张汇总表,这张表有保单,有险别,有性别,年龄,车龄,投保人,被保险人,出险次数等等等等信息,你就可以根据保单和险别这两个字段来确定一条数据。
保单这个字段是增加比较快的,因为只要有新用户,我就要增加一张保单,跨年也要增加保单。险别这个字段相对就比较稳定一些,因为一家保险公司要开发新险别,不是那么容易的,所以你就可以按照险别字段来分区。这样,几千万的数据,分完区,也就几十万。再查一条,怎么查都可以了。
我只是举个例子,千万级以上的数据,一般来说确定一条记录都要根据几个字段来确定,如果根据一个字段就可以确定,那这个就可以做主键了。加个索引就完事了,当然加索引之前你要考虑更新频率,频率过高也不适合加索引,相对而言,分区还是比较明智的。
最简单的就是利用好索引,能用到的索引都用上,避免全表都搜索一遍。