一个千万级的电商系统数据库的表查询问题属于小问题。做好几个方面就能有很大改观了:
1、硬件上的升级,换成固态硬盘组成Raid5,内存至少加到32G;
2、数据库构架升级为多个节点的负载均衡构架,对于Mysql推荐使用第三方数据库中间软件完成Mycat;
3、精确的数据库优化,分为几个步骤(重点):
Mysql配置文件参数的上的优化,具体可百度一下;在需要查询和排序的字段上建好索引,把默认值都改为不为Null(数字值的为0,字符串型的为空字符,日期型的为-00-00),对于已经为Null的字段,全部用相应的有效值代替;对于需要进行字符串模糊搜索的,则在数据库上配套使用ElasticSearch之类的全文索引技术,摒弃数据库自身的like或是instr等SQL语句式的字符串模糊搜索;对于需要多表查询且某个表的数据为静态数据(解释:指的是长时间内不会发生变更的数据。例如:商品的分类表,几乎不经常变更)的,可以先静态数据存放到缓存中,待应用取出后,再与缓存数据进行拼接完成数据的输出。举例说明:需求:查询商品信息时,要根据商品表中的商品分类ID读取到商品分类的名称。步骤1:将商品分类表的数据以分ID作为缓存索引,全部写入到MemCache中;步骤2:按条件读取到符合预期的商品列表信息;步骤3:循环读取商品列表,根据列表中每一行的数据的商品分类ID,去读取MemCache中的分类名称;4、针对业务上的优化,对于那些时效性不强的查询,改为后台任务定期生成结果,而不是实时查询的方式完成。例如:找出昨天的日志记录,可以使用计划任务的方式去定期生成昨天的日志记录结果,待用户需要数据时,直接从生成的日志记录结果读取返回即可。此举,可大大减少数据库的查询数量和负载。