首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >1个表,但有两个表。类似于mysql表的磁盘分区

1个表,但有两个表。类似于mysql表的磁盘分区
EN

Stack Overflow用户
提问于 2011-09-25 12:47:01
回答 2查看 104关注 0票数 1

有没有办法让一个表一分为二,或者像硬盘驱动器一样分区,这样我就可以调用

代码语言:javascript
复制
SELECT * FROM email validated

代码语言:javascript
复制
SELECT * FROM email pending

得到两种不同的结果。两个结果都不包含对方的行。

这是不是。我感觉我很久以前在某处读到过mysql分区,我想知道这是不是就是这样。如果不是,这是可能的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-25 14:49:11

MySQL支持称为VIEW的虚拟表。视图实际上是一个存储的MySQL查询,可以像查询真实表一样对其进行查询。

使用您提供的示例,您将创建一个名为email的基表,如下所示:

代码语言:javascript
复制
CREATE TABLE `email` (
            `email` VARCHAR(64) NOT NULL,
            `validated` CHAR(1) NOT NULL DEFAULT '0',
            PRIMARY KEY (`email`))
            ENGINE = MyISAM;

然后是两个虚拟表(视图),如下所示:

代码语言:javascript
复制
CREATE VIEW `email_validated` AS SELECT * FROM `email` WHERE `validated`='1';
CREATE VIEW `email_pending` AS SELECT * FROM `email` WHERE `validated`='0';

然后,您可以查询这两个视图,就像它们是实际的表一样。

但是要知道,使用视图会带来性能损失,因为只要引用视图,就会查询整个视图(执行视图的整个select语句)。在这样一个微不足道的例子中,如果在基表中索引了'validated‘字段,那么这不是什么大问题。然而,在更复杂的视图上,当仅尝试检索几行时,将整个视图虚拟表加载到内存中可能没有意义。

其他数据库引擎具有称为Materialized View的结构,该结构与MySQL视图相同,不同之处在于物化视图是以某个频率或触发器更新的已实现表存在的。可以对真实表执行的任何操作都可以对物化表执行,包括更改索引甚至存储引擎。在使用内存存储引擎维护汇总汇总表物化视图的同时,使用Archive存储引擎拥有事务历史是完全合理的。尽管MySQL本身并不支持实例化视图,但是有一些tricks可以模拟实例化视图的行为。

票数 3
EN

Stack Overflow用户

发布于 2011-09-25 13:49:02

好吧,即使使用分区是可能的,它也是错误的,因为用户最终将验证电子邮件,而您将不得不将其移动到另一个分区,这是昂贵的操作。

您必须在表中添加列,以存储值。然后,您可以在该列上进行分区,因此物理记录将位于不同的位置,如果您设置了多个服务器,甚至在不同的服务器上,但这是没有意义的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7543722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档