关于把long类型的参数直接传到xml中当sql查询的参数非常慢这件事
起初,有一张表超级大想要将表复制下来 如果查出来list再去复制这将非常慢,听了同事的建议使用了insert into (select * from table)速度得到了显著改善。可是我写代码的时候,再调用接口的时候发现足足有15s,而navicat执行sql语句只有400ms,感觉哪里出了问题但还不知道,最终经过同事的明察秋毫发现我的传参出了问题。
sql如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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值的情况,可能会导致索引失效
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~