SELECT idFROMusersWHERE age= 25改为SELECTidFROMusersWHERE age= 25UNIONSELECTidFROMusersWHERE age= 30No.5 谨慎使用IN和NOTININ和N…
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
No.1 避免全盘扫描
当要查询的数据量过大时全盘扫描的效率会很低。应该在 WHERE 和 ORDERBY 涉及的列上添加索引避免全盘扫描,能快速寻找数据。
No.2 避免NULL值判断
在WHERE子句中如果对字段进行NULL值判断索引会不起作用。可以在设计表结构时避免使用NULL值或者设置非空约束再就是给字段设置默认值。
No.3 避免使用 != 或 <>
在WHERE 语句中用 != 和 <> 也会让MySql无法使用索引,最好是改为使用 =, <, > 支持索引的操作符。
No.4 避免OR条件
在WHERE子句中使用OR条件会使MySql索引失效。可以使用UNION来将多个查询合并,或者拆分查询逻辑。
SELECT idFROMusersWHERE age = 25
改为
SELECTidFROMusersWHERE age = 25
UNION
SELECTidFROMusersWHERE age = 30
No.5 谨慎使用IN和NOT IN
IN和NOT IN在处理大集合时,可能导致全盘扫描,特别是当IN内包含大量非连续的值时。为了提高性能,可以用BETWEEN来替代IN,特别是在查询范围较小时。
SELECT id FROM users WHERE age IN (25, 26, 27)
改为
SELECT id FROM users WHERE age BETWEEN 25 AND 27
No.6 LIKE查询优化
LIKE查询在处理部分匹配时可能会全盘扫描。尤其是在使用通配符%作为开头时(如%abc%),MySQL无法使用索引,需要逐行匹配字符串。
避免使用%abc%或%abc,最好限制符号留在后缀位 (abc%)。
No.7 避免参数化查询导致全盘扫描
参数化查询可能会让MySQL无法充分利用索引,可以通过在查询中明确指定使用的索引来避免这个问题。
No.8 避免表达式操作
在WHERE语句中对字段进行表达式操作会使索引失效,应避免在查询条件中使用这样的操作。如果需要对某个字段进行计算,最好在应用程序层完成计算,并将结果传递给查询,而不是在查询中进行计算或使用函数。
No.9 使用EXISTS替代IN
当涉及子查询时,EXISTS比IN在某些情况下效率更高, EXISTS一旦找到符合条件的记录,就会停止进一步的查找,而IN则必须先执行整个子查询,然后将结果返回。
No.10 索引数量控制
虽然索引能够加快SELECT查询的速度,但过多的索引会影响表的INSERT和UPDATE操作性能。因为每次数据的插入、更新、删除都会使索引同步更新。通常一个表的索引数量最好不超过6个。
END
本文作者:刘 宸(上海新炬中北团队)
本文来源:“IT那活儿”公众号
来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。
Copyright©2013-2025 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利
苏公网安备32010402000125
苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司
南京思必达教育科技有限公司版权所有 百度统计