1、从代码逻辑上优化,规避复杂SQL
举例:计算比例C=A/B,将B的值,通过异步任务计算B的值,存入数据库,在实际查询中直接取值,避免关联查询造成SQL性能问题。
2、根据不同业务需求,使用不同数据库,使用ClickHouse替代MySQL
SELECT ITEM_FIRST_CATE_CODE, ITEM_FIRST_CATE_NAME itemFirstCateName, ITEM_SECOND_CATE_CODE, ITEM_SECOND_CATE_NAME itemSecondCateName, ITEM_THIRD_CATE_CODE, ITEM_THIRD_CATE_NAME itemThirdCateName, COUNT(1) skuNumber, SUM(WMS_STOCK_QTY) itemNumber FROM MOVE_PROGRAM_SKU_DETAIL WHERE main_id= 649 GROUP BY ITEM_FIRST_CATE_CODE, ITEM_SECOND_CATE_CODE, ITEM_THIRD_CATE_CODE ORDER BY ITEM_FIRST_CATE_NAME, ITEM_SECOND_CATE_NAME, skuNumber DESC, itemNumber DESC
举例:MySQL数据库,数据量几千万,查询以上SQL,查询失败,后来将数据存入ClickHouse,几秒钟就可以查询出结果
3、添加索引
4、避免索引失效
a、遵守最左前缀原则
a-1、不使用like '%a'
a-2、在联合索引(a,b,c)中,不使用b=XX and c=XX
5、select 语句
a、SELECT语句指明字段名称
6、where 语句
a、避免where 语句中对字段进行表达式操作
b、应尽量避免在where语句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描
参考文档:
1)sql优化的N种方法_持续更新
https://blog.csdn.net/wang5701071/article/details/108797859