关于把long类型的参数直接传到xml中当sql查询的参数非常慢这件事
起初,有一张表超级大想要将表复制下来 如果查出来list再去复制这将非常慢,听了同事的建议使用了insert into (select * from table)速度得到了显著改善。可是我写代码的时候,再调用接口的时候发现足足有15s,而navicat执行sql语句只有400ms,感觉哪里出了问题但还不知道,最终经过同事的明察秋毫发现我的传参出了问题。
sql如下:
INSERT INTO quality_evaluate_autoform (
SELECT
UUID_SHORT(),
form_name,
form_code,
NULL,
CASE
WHEN fill_state != '未填写' THEN
'已填写'
when fill_state = '未填写' then
'未填写'
END AS fill_state,
signature_number,
0,
NULL,
NULL,
file_token,
NULL,
default_form_data,
form_data,
html_original_body,
html_body,
NULL,
#{id},
NULL,
ref_autoform_htmldata_id,
ref_autoform_id,
ref_directory_tree_node_id,
NULL,
NULL,
NULL,
NULL,
NULL,
now(),
NULL,
now(),
0,
NULL,
NULL,
NULL
FROM
quality_evaluate_autoform
WHERE
ref_wbs_node_id = #{wbsNodeId}
AND delete_flag = 0)
就是因为#{wbsNodeId} 这个参数我在代码传参时候不小心用了long类型而导致的!我的天!400ms的事情因为一个类型转换变成了15s,而且还因为转换类型使得ref_wbs_Node_id上的索引失效!所以一定要仔细看好每一步的传参!
1. 用or索引失效——解决用in 代替or
2. 字段使用函数导致索引失效
3. 隐式类型转换会使索引失效!(我就是犯了这个)
4. like +”%param%“ 索引失效
5. 如果查询索引辨识度低,索引可能也不会用
6. NULL值:如果索引列包含NULL值,并且查询条件中没有明确处理NULL值的情况,可能会导致索引失效
posted on 2023-12-18 20:08 nitianxiaozi 阅读(53) 评论(0) 收藏 举报
浙公网安备 33010602011771号