SQL语句性能优化集锦

数据库发展到现在已经30年了,在行业中积累了大量的SQL语句优化经验,网上资料比较分散,为便于查阅,本专题进行了收集
共  21  篇文章,访问量:6077  次
1. 避免使用SELECT * 浏览数:150 01月13日 17:57
有的时候,我们为了图方便,会直接使用SELECT * 一次性查出表中所有的数据: SELECT * FROM student 执行结果如图所示:
2. 慎用UNION关键字 浏览数:183 01月13日 18:00
例如我们根据性别去查询所有学生的信息,虽然这种操作多此一举,直接SELECT *就好了,为了演示这2个关键字的详细区别,使用UNION关键字执行的SQL如下: SELECT * FROM student WHERE sex = 0 UNION  SELEC...
3. 小表驱动大表 浏览数:134 01月13日 18:01
言简意赅,意思就是让小表查出来的数据去再查询大表当中的数据。比如我们想查询学生表当中特殊学生的信息,我们就可以使用以special_student这个小表去驱动student这个大表,...
4. 避免使用or条件(有争议) 浏览数:168 01月13日 18:04
如果我们要查询指定的性别或者指定的身份证号码的学生,执行SQL如下: SELECT * FROM student WHERE sex = 0 ...
5. LIKE语句优化 浏览数:163 01月13日 18:09
平时我们日常开发用到的LIKE关键字进行模糊匹配会非常多,但是有的情况会使索引失效,导致查询效率变慢,例如: 只要身份证字段包含50就查出来,执行SQL如下: SELECT * FROM student WHERE id_card like '%50%'...
6. 字符串字段优化 浏览数:149 01月13日 18:11
查询指定的身份证号码的学生,如果我们平时疏忽了给身份证号码加上单引号,执行SQL如下: SELECT * FROM student WHERE...
7. 最左匹配原则(重要) 浏览数:149 01月13日 18:13
上面我们按照name,address和phone这个顺序建立了复合索引,相当于建立了(name),(name、address)和(name、address、phone)三个索引,如果我们查询的where条件违背了建立的顺序,则复合索引就失效了,下面直接进行SQL分析:
8. COUNT查询数据是否存在优化 浏览数:141 01月13日 18:15
比如我想判断年龄为18岁的学生是否存在,我们往往会执行如下SQL: SELECT COUNT(*) FROM student WHERE ...
9. LIMIT关键字优化 浏览数:152 01月13日 18:17
平日开发工作中,我们对于分页的处理一般是这样的: SELECT * FROM student LIMIT 999910,10
10. 提升GROUP BY的效率 浏览数:145 01月13日 18:19
我们平日写SQL需要多多少少会使用GROUP BY关键字,它主要的功能是去重和分组。 通常它会跟HAVING一起配合使用,表示分组后再根据一定的条件过滤数据,常规执行的SQL如下:
11. 避免使用!=或<> 浏览数:140 01月13日 18:20
尽量避免使用!=或<>操作符,下面直接分析SQL: SQL分析: 使用EXPLAIN关键字执行这段SQL: EXPLAIN SELECT * FROM student WHERE id_card != '5031520645'
12. 避免NULL值判断 浏览数:139 01月13日 18:21
为了确保没有NULL值,我们可以设定一个默认值。 SQL分析: 使用EXPLAIN关键字执行这段SQL: EXPLAIN SELECT * FROM student WHERE id_card IS NOT NULL
13. 避免函数运算 浏览数:141 01月13日 18:22
在日常SQL撰写中,在WHERE条件上多多少少会用到一些函数,例如截取字符串,执行SQL如下: 使用EXPLAIN关键字执行这段SQL: EXPLAIN SELECT * FROM student WHERE SUBSTR(id_card,0,9)
14. JOIN的表中使用索引字段 浏览数:159 01月13日 18:24
如果日常开发中,使用JOIN关键字链接表后,使用的ON关键字进行条件链接时,如果条件没有索引,则会进行全表扫描,执行SQL如下: EXPLAI...
15. 用EXISTS代替IN 浏览数:543 01月13日 18:25
IN关键字适合于外表大而内表小的情况,EXISTS适合于外表小而内表大的情况,执行SQL如下: SELECT * FROM special_s...
16. 为什么需要进行SQL优化? 浏览数:568 01月13日 18:36
在进行多表连接查询、子查询等操作的时候,由于你写出的SQL语句欠佳,导致的服务器执行时间太长,我们等待结果的时间太长。基于此,我们需要学习怎么优化SQL。
17. 索引的分类与创建 浏览数:575 01月13日 18:38
1)索引分类 单值索引 唯一索引 复合索引 ① 单值索引 利用表中的某一个字段创建单值索引。一张表中往往有多个字段,也就是说每一列其实都可以创建一个索引,这个根据我们实际需求来进行创建。还需要注意的一...
18. SQL性能问题的探索 浏览数:540 01月14日 19:58
需要我们使用explain分析SQL的执行计划。 该执行计划可以模拟SQL优化器执行SQL语句,可以帮助我们了解到自己编写SQL的好坏。 SQL优化器自动优化:最开始讲述MySQL执行原理的时候,我们已经知道MySQL有一个优化器,当你写了一个SQL语句的时候,SQL优...
19. explain执行计划常用关键字详解 浏览数:558 01月14日 20:00
1)id关键字的使用说明 ① 案例:查询课程编号为2 或 教师证编号为3 的老师信息: #查看执行计划 explainselectt.* fromteachert,coursec,teacherCardtc wheret.tid=c.tidandt.tc...
20. 优化示例 浏览数:593 01月14日 20:01
1)引入案例 #创建新表 createtabletest03 ( a1int(4)notnull, a2int(4)notnull, a3int(4)notnull, a4int(4)notnull ); #创建一个复合索引 createindexa1_a2_a3_te...
21. 避免索引失效的一些原则 浏览数:566 01月14日 20:02
① 复合索引需要注意的点 复合索引,不要跨列或无序使用(最佳左前缀) 复合索引,尽量使用全索引匹配,也就是说,你建立几个索引,就使用几个索引 ② 不要在索引上进行任何操作(计算、函数、类型转换),否则索引...