千万级数据库多表查询解决方案

千万级数据库多表查询解决方案,第1张

1 建立合理的索引,避免扫描多余数据,避免表扫描!

2使用子查询为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。在这种情况下可以考虑用联接查询来取代。

3用EXISTS替代IN、用NOT EXISTS替代NOT IN。因为EXISTS引入的子查询只是测试是否存在符合子查询中指定条件的行,效率较高。无论在哪种情况下,NOT IN都是最低效的。因为它对子查询中的表执行了一个全表遍历。

例如 表数据有两列A,B ,存在重复情况,那么可以

select A,B,COUNT() FROM table t group by A,B

其中COUNT() 的结果是重复条数,为1表示不重复。

多表查询类似

你这个写法,不会走索引,所以效果不理想,不知道你数据库索引,没法具体回答,如果你数据库表记录本来就很少,也无所谓,但这也不会出现你说的不理想,所以,还是在where里考虑怎么命中索引范围,然后在用模糊查询过滤

当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询。

1 子查询

子查询是一个嵌套在select、insert、update或delete语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。

11语法规则:

- 子查询的select查询使用圆括号括起来

- 不能包括compute或for browse子句

- 如果同时指定top子句,则可能只包括order by子句

- 子查询最多嵌套32层,个别查询可能会不支持32层嵌套

- 任何可以使用表达式的地方都可以使用子查询,主要它返回的是单个值

- 如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中

12 语法格式:

- where 查询表达式 [not] in(子查询)

- where 查询表达式 比较运算符 [any|all] (子查询)

- where [not] exists (子查询)

2 嵌套查询

嵌套查询是指将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询。

嵌套查询中上层的查询块称为外侧查询或父查询,下层查询块称为内层查询或子查询。SQL语言允许多层嵌套,但是在子查询中不允许出现order by子句,order by子句只能用在最外层的查询中。

嵌套查询的处理方法是:先处理最内侧的子查询,然后一层一层地向上处理,直到最外层的查询块。

21 简单的嵌套查询

子查询的运算符含有=、<>、<、>、<=、>=

三个查询:

第一个:查询年纪>25的老师所教的学生

第二个:查询年纪>25的老师

第三个:验证查询到的学生信息

对比:当子查询中的分那会的结果不是一个时,父查询无法正常工作

22 带IN的嵌套查询

当子查询返回一系列值时,适合带IN的嵌套查询。

23 NOT IN

24 SOME

25 ANY

26 ALL

27 EXIST

这两个没有太大的关系,如果能够用多表连查解决的问题,一般都采用join连查的方式,这样速度最快;

select t1name,t2name from T_table1 t1 left join T_table2 t2 on t1id = t2tid;

嵌套查询一般用于解决复杂问题,比如t1记录书籍的名称、作者、销量,那么要找出名字、作者不重复的记录,就要用嵌套了

select t1book from table t1 where not exists (

    select 1 from table t2 where t1author = t2author and t1book = t2book and t1id >  t2id

)

以上就是关于千万级数据库多表查询解决方案全部的内容,包括:千万级数据库多表查询解决方案、sql 嵌套查询、Mysql 多表嵌套查询 上面一段是原来写的 下面一段是我改过的,效果不理想 怎样优化才最好等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9770434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存