当前位置: 首页 > 科技观察

高效SQL查询的建议,你学会了吗?

时间:2023-03-19 20:21:56 科技观察

为什么别人的查询只需要几秒钟,而你的查询语句少则十几秒,长则十几分钟甚至几小时?与你的查询语句是否高效有很大关系。今天我们就来看看如何编写更高效的查询语句。1、尽量不要使用NULL作为默认值。如果索引列上有NULL值,索引就会失效,查询速度会降低。如何优化呢?例如:SELECT*FROM[Sales].[Temp_SalesOrder]WHEREUnitPriceISNULL我们可以将NULL的值设为0或者其他固定值,以保证索引能够持续有效。SELECT*FROM[Sales].[Temp_SalesOrder]WHEREUnitPrice=0这是重写的查询语句,效率会比上面快很多。2、尽量不要在WHERE条件语句中使用!=或<>。在WHERE语句中使用!=或<>也会使索引失效,然后进行全表扫描,耗时较长。3.尽量避免在WHERE子句中使用OR。在OR的情况下,我们可以用UNIONALL改写OR。例如:SELECT*FROMT1WHERENUM=10ORNUM=20可以改写为SELECT*FROMT1WHERENUM=10UNIONALLSELECT*FROMT1WHERENUM=204.IN和NOTIN也应谨慎使用。当遇到连续的精确值时,我们可以使用BETWEENAND进行优化。例如:SELECT*FROMT1WHERENUMIN(5,6,7,8)可以改写为:SELECT*FROMT1WHERENUMBETWEEN5AND8.5。子查询中的IN可以使用EXISTS代替子查询中常用的IN。如果关联查询换成EXISTS会更快。例如:SELECT*FROMT1WHEREORDER_IDIN(SELECTORDER_IDFROMORDERWHEREPRICE>20);可以改写为:SELECT*FROMT1ASAWHEREEXISTS(SELECT1FROMORDERASBWHEREA.ORDER_ID=B.ORDER_IDANDB.PRICE>20)虽然代码量可能比上面多一点,但是使用效果会比上面的查询语句好。6、模糊匹配模糊查询尽量使用前缀匹配,使用LIKE时尽量使用前缀匹配,这样会占用索引,减少查询时间。例如:SELECT*FROMT1WHERENAMELIKE'%李四%'或者SELECT*FROMT1WHERENAMELIKE'%李四'不会去索引,只有当SELECT*FROMT1WHERENAMELIKE'李四%'只有这样才会采用索引。以上都是经常遇到的,直接告诉大家怎么操作,大家可以下去做实验试试看。