优化这段代码 SELECT -- 任务id tk.TASK_ID, -- 业务批次号 std.BUSINESS_NO, -- 客户编号 sc.CUSTOMER_NO , -- 聚合商名称 sc.CUSTOMER_NAME , -- 省份 tk.SOURCE_CHANNEL , -- 响应类型 tk.RESPONSE_TYPE , -- 是否模拟 tk.IS_TEST , -- 响应容量 std.TARGET , -- 实际响应容量 std.REAL_TRAGET , -- 响应完成率 ROUND(std.REAL_TRAGET/std.TARGET*100,1) as RESPONSE_COMPLETION_RATE , -- 任务状态 tk.TASK_STATUS, -- 任务拆解ID std.DISASSEMBLE_ID FROM sr_task tk JOIN sr_task_disassemble std ON tk.TASK_ID = std.TASK_ID JOIN sr_customer sc ON std.CUSTOMER_ID = sc.CUSTOMER_ID where 1=1 <if test="taskListVo.province !=null and taskListVo.province !=''"> and tk.SOURCE_CHANNEL = #{taskListVo.province} </if> <if test="taskListVo.responseType !=null and taskListVo.responseType !=''"> and tk.RESPONSE_TYPE = #{taskListVo.responseType} </if> <if test="taskListVo.taskType !=null and taskListVo.taskType !=''"> and tk.SOURCE_CHANNEL like #{taskListVo.taskType} </if> <if test="taskListVo.taskStatus !=null and taskListVo.taskStatus !=''"> and tk.TASK_STATUS like #{taskListVo.taskStatus} </if>
时间: 2023-06-06 22:06:01 浏览: 97
优化建议如下:
1. 尽量避免使用SELECT *,而是应该明确指定需要的列。
2. 避免在WHERE子句中使用1=1这种无意义的条件。
3. 尽量使用表的缩写来简化代码。
4. 使用LEFT JOIN或者INNER JOIN取代JOIN,LEFT JOIN或者INNER JOIN的性能比直接使用JOIN更高效。
5. 如果需要查询的列是数值类型,可以使用 ISNULL 或 COALESCE 函数来避免NULL值。
阅读全文