抛开性能等问题,一张表分成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千万级表索引设计得当,查询速度很快的。不知道为啥要分表。
建个视图吧
分表架构时最好是有中间件做支持,用来屏蔽这些细节。
如果是分库分表,有成熟的方案不?

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),