当前位置:首页 > 数据库 > php mysql分表后如何查询

php mysql分表后如何查询

2022年11月09日 23:10:47数据库10

抛开性能等问题,一张表分成N张表后,如何查询所有分表 type = 1 的数据?

(一张用户表,分成10张表后,我想取所有用户 type = 1 的数据)

回复内容:

抛开性能等问题,一张表分成N张表后,如何查询所有分表 type = 1 的数据?

(一张用户表,分成10张表后,我想取所有用户 type = 1 的数据)

MySQL有一个MERGE存储引擎是专门做这个事情的,借这篇博文了解:Mysql MERGE引擎分表

(SELECT xx FROM table1 WHERE type=1) union

(SELECT xx FROM table1 WHERE type=1) union

(SELECT xx FROM table1 WHERE type=1) union

(SELECT xx FROM table1 WHERE type=1)

如果你需要二次提取

要么自己写程序从上面的union结果集里提取

要么子查询

SELECT xxx FROM (

(SELECT xx FROM table1 WHERE type=1) union

(SELECT xx FROM table1 WHERE type=1) union

(SELECT xx FROM table1 WHERE type=1) union

(SELECT xx FROM table1 WHERE type=1)

) t WHERE t.xxx....

不过, 我上面写的那些你可以不用看, 现在一些通用程序使用分表是因为MySQL 5.1之前不支持分区, 至少你这个场景合适的是分区, 而非分表.

分表的数量会影响采用哪种方案。

从数据库层面来解决:

Mysql MERGE 引擎,@samoay 回答了

Mysql 表分区,5.1 版本后才支持,@Yj.Lee 回答了

从 SQL 层面来解决:

标准的用法就是 UNION了,@Yj.Lee 也回答了。

题主的分表数量可能比较多,那么 SQL 方式可能不太适用,可以考虑数据库层面的解决方法。或者从应用层来解决,多个查询、拼合结果;或者按 type 建简单的冗余表/缓存进行查询;或者采用任何方法但缓存查询结果等等。

以上都是分表的情况,如果是分库,数据库层面的方法基本上也不可行了,只能从应用上来解决。

如果数据量就是不拆不行,那么就直接拆干净。MySQL拆了以后就把它看作key value的持久层,不要想跨表跨库。(除非是统计/数据仓库之类的需求,一个查询可以不计成本做很久堵死整台服务器也无妨)

慎重选择拆分依据,比如type很均衡,应用场景又基本总是已知type,不妨直接按type拆分。

其次如果就是大量数据,且就有和拆分纬度不同的检索需求,那么你需要的是搭搜索服务,或者说索引服务。这方面我没有实际经验,只能给一串关键词了 lucene solr sphinx elasticsearch

这中应该是按照路由去存储表格的吧,但是如果想查询一个不是按路由键的时候,就需要全库查询了吧

目测你需要的是分区而不是分表。

分表最好的办法就是merge引擎,适用于大部分场景,当然要看具体的数据量。

mysql部署中依次参考:

分区

分表

sharding

不过mysql千万级表索引设计得当,查询速度很快的。不知道为啥要分表。

建个视图吧

分表架构时最好是有中间件做支持,用来屏蔽这些细节。

如果是分库分表,有成熟的方案不?

php mysql分表后如何查询 _ JavaClub全栈架构师技术笔记

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

作者:方仁野
来源链接:https://blog.csdn.net/weixin_36475420/article/details/113235742

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/69171.html

分享给朋友:

“php mysql分表后如何查询” 的相关文章

MySQL表的增删改查(进阶)

MySQL表的增删改查(进阶)

数据库的约束 约束类型 NOT NULL UNIQUE DEFAULT PRIMARY...

MySQL数据库(基础)

MySQL数据库(基础)

目录 1. 数据库概念 1.1 数据库是干嘛的? 1.2 数据库和数据结构是啥关系? ​1.3 两种类型的数据库 2. MySQL数据库 2.1 MySQL数据库概念 2.2 MySQL基本操作  2.2.1 建立...

Linux安装MySQL(超详细)

Linux安装MySQL(超详细)

1 查看是否已经安装 Mysql rpm -qa | grep mysql 我之前装过一次! 如果你查看出来有东西,可以使用下面命令将其删除 rpm -e 文件名   2 下载官方 Mysq...

cloudera-scm-server启动出现Error creating bean with name 'entityManagerFactoryBean'与HHH010003: JDBC Driver class not found: com.mysql.jdbc.Driver错误解决办法(图文详解)

cloudera-scm-server启动出现Error creating bean with name 'entityManagerFactoryBean'与HHH010003: JDBC Driver class not found: com.mysql.jdbc.Driver错误解决办法(图文详解)

     不多说,直接上干货!       问题详情 2017-07-31 22:19:40,342 INFO main:com.cloudera.server.cmf.Main: Starting SCM Serv...

MySQL学习(4)︱数据库的查询

MySQL学习(4)︱数据库的查询

在SQL中,使用select语句来查询数据。不同的关系数据库,select语法会有细微差别,在MySQL官网可以查询到支持的select语法。 SQL语法: SELECT column_name1, column_name2//...

MYSQL查询空值/NULL值

 select * from XXXX where YYYY is NULL 作者:Bupt_Luke 来源链接:https://blog.csdn.net/u012662688/article/details/51680437...

mysql数据查询——复杂查询

《实验五 数据查询——复杂查询》实验说明 一、 适用课程:《数据库原理与应用》 实验学时:3 二、实验目的: (1) 掌握SELECT语句的语法格式; (2) 熟练运用SELECT语句进行多表连接查询; (3) 熟练运用SELECT语句进行各种复杂类型的...

关于mysql数据库连接异常处理

tomcat启动错误日志关键信息: 28-Aug-2019 14:22:55.014 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerB...

mysql版本查询

SHOW VARIABLES LIKE "%version%"; 参考: 2.2 Determining Your Current MySQL Version 转载于:https://my.oschina.net/fxt...

mysql简单查询

1.普通查询 select * from info; #查询所有内容 select Code,Name from Info #查询某几列 2.条件查询 select * from Info where Code='p001' #条件查询...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。