三个大方向
1.优化sql以及数据库设计
2.升级数据库以及硬件
3.更换数据库类型,更换newSQL、noSQL数据库
大方向1之数据库设计篇
--表库设计
1.1 字段避免null,null值很难优化,推荐默认数字0替代
1.2 尽量准确使用数据类型,并合理的设计长度,比如使用enum char而不用varchar,char定长的,varchar可变长,定长读取速度快占空间固定,可变长占空间随存数据大小变化但读取速度相对慢
1.3单表不要太多字段
1.4分区 分表 分库(读写分离)等
--索引设计
1.4 索引不是越多越好,要根据查询针对性的创建,考虑where和order by命令上涉及查询频繁列建立,
可根据explain来查看索引使用率
1.5 避免where条件中有null判断和数据,否则索引会失效,尽可能使用not null控制字段
1.6值分布稀少字段不适合建立索引,比如性别只有两种值字段
1.7不适用外键和unique,由程序保证约束
1.8多条件查询频繁字段考虑建立联合索引,遵循最左原则可以涉及单条件查询。
1.9索引遵循最左前原则
大方向1之sql优化篇
1.1使用limit对查询结果限定
1.2查询字段写出来不要写select * ,可以增加查询效率以及索引使用率
1.3使用join替代子查询
1.4拆分较大insert和delete语句
1.5开启慢查询日志或者程序使用数据库查询监控找慢的sql
1.6条件不作运算,避免使用%xxx != <> 等查询样式
(以下为复制内容)
大方向2之升级数据库
2.1 开源数据库会带来大量的运维成本且其工业品质和MySQL尚有差距,有很多坑要踩,如果你公司要求必须自建数据库,那么选择该类型产品。如tiDB pingcap/tidb,Cubrid Open Source Database With Enterprise Features。
2.2 阿里云POLARDB,POLARDB 是阿里云自研的下一代关系型分布式云原生数据库,100%兼容MySQL,存储容量最高可达 100T,性能最高提升至 MySQL 的 6 倍。POLARDB 既融合了商业数据库稳定、可靠、高性能的特征,又具有开源数据库简单、可扩展、持续迭代的优势,而成本只需商用数据库的 1/10。
2.3 阿里云OcenanBase,淘宝使用的,扛得住双十一,性能卓著,但是在公测中,我无法尝试,但值得期待。
2.4阿里云HybridDB for MySQL (原PetaData),云数据库HybridDB for MySQL (原名PetaData)是同时支持海量数据在线事务(OLTP)和在线分析(OLAP)的HTAP(Hybrid Transaction/Analytical Processing)关系型数据库。
2.5腾讯云DCDB,DCDB又名TDSQL,一种兼容MySQL协议和语法,支持自动水平拆分的高性能分布式数据库——即业务显示为完整的逻辑表,数据却均匀的拆分到多个分片中;每个分片默认采用主备架构,提供灾备、恢复、监控、不停机扩容等全套解决方案,适用于TB或PB级的海量数据场景。
大方向3之换数据库类型
hadoop家族。hbase/hive怼上就是了。但是有很高的运维成本,一般公司是玩不起的,没十万投入是不会有很好的产出的!
我选择了阿里云的MaxCompute配合DataWorks,使用超级舒服,按量付费,成本极低。
MaxCompute可以理解为开源的Hive,提供SQL/mapreduce/ai算法/python脚本/shell脚本等方式操作数据,数据以表格的形式展现,以分布式方式存储,采用定时任务和批处理的方式处理数据。DataWorks提供了一种工作流的方式管理你的数据处理任务和调度监控。
当然你也可以选择阿里云hbase等其他产品,我这里主要是离线处理,故选择MaxCompute,基本都是图形界面操作,大概写了300行SQL,费用不超过100块钱就解决了数据处理问题