- 对查询进行优化,应尽量避免全表扫描,首先应考虑在WHERE及ORDER BY涉及的列上建立索引。
应尽量避免在where子句中对字段进行NULL值判断,建表时NULL是默认值,但大多数时应该使用NOT NULL。
尽量避免在where子句中使用!=或<>操作符。
应尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引进行全表扫描。
IN和NOT IN也要慎用,否则会导致全表扫描,可以使用between就尽量使用between。
在使用like需要注意不要使用 like ‘%abc%’或者like '%abc',可使用like 'abc%'。
如果在where子句中使用参数,也会导致全表扫描。
很多情况下可以使用EXISTS代替IN是一个好的选择。
索引可以提高相应的select的效率,但同时也降低了INSERT及UPDATE的效率,一个表的索引数最好不要超过6个。
应尽量可能的避免更新clustered索引数据列,一旦更新数据列,会耗费相当大的资源。
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能并会增加存储开销。
应尽量使用varchar,nvarchar代替char,nchar。字段长度可变,可以节省存储空间。
在语句查询时,不要使用*。
尽量不要向客户端返回大数据
近可能使用表别名,把别名前缀于每个字段上,可减少解析时间。
使用临时表。
某些查询SQL中加上nolock,读和写相互阻塞,为了提高并发性能。但是会可能读到未提交的脏数据。使用nolock有3条原则:
查询的结果用于“插,删,改”的不能加nolock
查询的表属于频繁发生页分裂的,慎用nolock
能够用临时表提高性能的,不要用nolock
不要使用超过5个以上的表连接,少用子查询,视图嵌套不要过深,一般的视图嵌套不要超过2个
作者:小楼一夜雨
ps:以上是SQL优化十八条全部内容,希望文章能够帮你解决SQL优化十八条所遇到的游戏开发问题。
本文收录在 游戏编程 🕹️ - 学习数据库专题,分享走一走~
您可以在登录后,发表评论