SQL面试题:关于SQL优化的18个知识点
[1]查询语句中不要使用*;
[2] 尽量减少子查询,改用相关查询(左连接、右连接、内连接);
[3] 减少IN或NOT IN的使用,用exists、 does not exist或相关查询语句代替;
[4] 尽量避免在where子句中使用or来连接条件。如果某个字段有索引,如果该字段没有索引,则会导致引擎放弃使用索引而进行全表扫描。尝试使用union或union all代替(在确认没有重复数据或者不需要消除重复数据时union all会更好);
[5]合理添加冗余字段(减少表相关查询);
[6]添加中间表进行优化(这个主要用于统计报表场景,后台启动定时任务先统计数据,查询中尽量不要用到统计的时候);
【7】创建表时,如果可以使用数字类型字段,就可以使用数字类型字段(类型、状态……)。数字字段比条件查询等字符串查询更快。这是因为引擎在处理查询和连接时会逐一比较字符串中的每个字符,而对于数字类型只需比较一次就足够了;
[8]能够过滤出最大条数记录的条件必须写在where子句的末尾;
[9]尽量避免在where子句中评估字段的空值,否则引擎将放弃使用索引并执行全表扫描;
[10] 尽量避免在where子句中使用索引。在where子句中使用!=或操作符,否则引擎将放弃使用索引并执行全表扫描;
[11]尽量避免对where子句中的字段进行表达式操作,这会导致引擎放弃使用索引而进行全表扫描;
[12]尽量避免对where子句中的字段进行函数操作,这会导致引擎放弃使用索引而进行全表扫描;
[13]当使用索引字段作为条件时,如果该索引是复合索引,则必须使用索引中的第一个字段作为条件,以保证系统使用该索引。否则索引不会被使用,应该尽可能使用。字段顺序与索引顺序一致;
[14]对于几个大数据量的表JOIN(这里几百条记录算大),必须先分页再join,否则逻辑读会很高,性能很差;
[15] 索引越多越好。索引虽然可以提高相应选择的效率,但同时也降低了插入和更新的效率。由于索引可以在插入或更新过程中重建,因此必须仔细考虑如何构建索引。 ,在这种情况下。一个表中的索引最好不要超过6个。如果太多,就应该考虑是否有必要对一些不常用的列建立索引;
[16]尽量使用varchar/nvarchar代替char/nchar,因为首先变长字段的存储空间较小,可以节省存储空间。其次,对于查询来说,在相对较小的领域内搜索效率明显更高;
[17] 使用相似关键字进行模糊查询时,索引前面放%是不起作用的。只有当“%”不在第一位时,索引才会生效(如'%文' - 索引不起作用);
[18]优化查询时,尽量避免。对于全表扫描,首先应该考虑在where和order by中涉及的列上创建索引。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。