起初,有一张表超级大想要将表复制下来 如果查出来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值的情况,可能会导致索引失效
标签:xml,form,long,索引,参数,失效,NULL,ref,id From: https://www.cnblogs.com/xiaozi718/p/17912130.html