伊人成色综合人夜夜久久
你的位置: 精品少妇牲交视频大全 > 伊人成色综合人夜夜久久 >
巨匠好,我是安果!
职责中,咱们时常需要编写 SQL 剧本,对数据库进行增、删、改、查,很少会研讨到 Sql 性能优化
内容上,从性能角度研讨,有许多 Sql 关键字都有它们各自的使用场景;如若使用适合,能大地面擢升后端就业的反映后果
底下以 Mysql 为例,排列出几个比较实用的小 Tips
2. union、union all、orunion [all] 代表连合查询,即:将多个查询已毕归并起来成一个已毕并复返
PS:union 连合查询针对每一个查询已毕,必须保证列数量、列数据类型及查询规矩一致
语法如下:
# 以两张表的连合查询为例 # table_one:表一 # table_two:表二 # 表一中的查询字段:table_one_field1,table_one_fileld2... # 表二种的查询字段:table_two_field1,table_two_field2... # 防备:表一、表二查询字段数量、字段类型、字段规矩应该保持一致 select table_one_field1,table_one_fileld2... from table_one union [all] select table_two_field1,table_two_field2... from table_two;
其中,union、union all、or 三者的诀别如下:
union表教授后会愚弄字段的规矩进行排序,以此筛选掉叠加的数据行,临了再复返已毕
因此,当数据量很大时后果很低
union all比较 union,union all 在表教授时不会删除叠加的数据行,免费看黄软件平直复返表连合后的已毕
因此,union all 试验后果要高许多,在不需要去重和排序时,更推选使用 union all
oror 用于 SQL where 子句中,SQL 剧本可读性更高,可是它会引起全表扫描,根柢不走索引查询
是以庸俗情况下,union [all] 查询会愚弄索引进行查询,试验后果要高于 or;可是当 or 条款中查询列换取,or 的试验后果要高于 union
3. group by + having、wheregroup by 分组查询,伊人成色综合人夜夜久久阐明一个或多个列对已毕集进行分组,一般互助团聚函数使用
语法如下:
# 查询字段:多个查询字段 select 查询字段...,团聚函数... from table_one where 条款语句 group by 分组字段...having 分组条款; # 比如 select red_num1,count(red_num1) from dlt where create_at>='2021-11-01' group by red_num1;
其中,having 和 where 使用上有底下诀别:
where在 group by 分组前试验,将查询已毕按照条款过滤数据
需要防备的是,where 无法与团聚函数一齐使用
having只可互助 group by 使用,在分组之后试验,用于过滤称心条款的组
需要防备的是,分组是一个耗时的操作,提出在分组前使用 where 对数据进行一次过滤,然后再进行分组
比如,where 搭配 having 一齐使用
# 查询表dlt # 最初,使用where通落后辰过滤数据 # 然后,使用字段red_num1+group by对数据进行分组 # 临了,使用having对分组后的数据再进行一次过滤 select red_num1,count(red_num1) from dlt where create_at>='2021-10-01' group by red_num1 having count(red_num1)>=2;4. exists、in
exists 用于 where 子句中,一般用于判断子查询中是否会复返数据,如若复返的数据不为空,则为 True,不然为 False
PS:exists 也不错搭配 not 使用,查询出不称心子查询语句的数据
语法如下:
-- exists使用 select * from 表一 where exists(select * from 表二 where 条款判断语句); -- not exists使用 select * from 表一 where not exists(select * from 表二 where 条款判断语句);
in 不异用于 where 子句中,筛选出某个表字段存在于多个值中的所稀有据
关键字 in 常见的 2 种使用神气如下:
-- in 使用 -- 神气一 select * from 表名 where 字段 in(过滤字段1,过滤字段2,过滤字段3...); -- 神气二 select * from 表名1 where 字段1 in (select 字段2 from 表名2 where condition)
由于 SQL 做子查询最优决议是小表启动大表,关于 in 来说是子查询表启动外在,当子查询表数据少于主表数据时推选使用
而 exists 是外在启动子查询表,因此当外在数据少于子查询表时更推选使用