- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题是针对 MySQL 的(它允许列中有许多 NULL,这是唯一的,所以我的问题的解决方案可能会略有不同)。
有两个表:members 和 Table2。表成员有:memberid char(20),
这是一个主键。 (请不要推荐使用 int(11) 而不是 char(20) 作为 memberid,我无法更改它,它正好包含 20 个符号)。
表 2 有:
CREATE TABLE IF NOT EXISTS `Table2`
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
memberid varchar(20) NOT NULL,
`Time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
status tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Table2.memberid 是一个单词“guest”(可以重复多次)或来自 members.memberid 的值(也可以重复多次)。 Table2.memberid 列中的任何值(如果不是“guest”)都存在于 members.memberid 列中。同样,members.memberid 是唯一的。 Table2.memberid,即使排除'guest'字也不唯一。
因此,Table2.memberid 列如下所示:'客人''lkjhasd3lkjhlkjg8sd9''kjhgbkhgboi7sauyg674''客人''客人''客人''lkjhasd3lkjhlkjg8sd9'
Table2 只有 INSERTS 和 UPDATES。它只更新状态。更新状态的条件:设置 status=0 WHERE memberid='' 和 status=1。因此,它可以更新一次或根本不更新。因此,UPDATES 的数量小于或等于(根据统计,它是 INSERTS 数量的两倍)。
问题只是关于优化。问题可以拆分为:
1) 您是否强烈建议将“guest”一词替换为 NULL 或特殊的“xxxxxyyyyyzzzzz00000”(20 个符号,如“非常特殊和保留”的字符串)以便您可以使用字符(20) 对于Table2.memberid,因为所有的值都是char(20)?
2) 使用外键怎么样?由于“客人”的值(value),我不能使用它。该值不能在 members.memberid 列中。
换句话说,我需要一些帮助来决定:
是否可以使用“guest”(我喜欢这个词)-vs- 选择 20-char-reserved-string 这样我就可以使用 char(20) 而不是 varchar(20 ) -vs- 保留 NULL 而不是“guest”,
除“guest”外的所有值实际上都是外键。有没有可能使用此信息来提高性能的方法?
该表经常使用,所以我必须尽可能好地构建 Table2。非常感谢任何想法。
谢谢。
添加:嗯...我想我找到了一个很好的解决方案,它允许我将 memberid 视为外键。
最佳答案
1) Do you HIGHLY recommend to replace the word 'guest' to NULL or to a special 'xxxxxyyyyyzzzzz00000' (20 symbols like a 'very special and reserved' string) so you can use chars(20) for Table2.memberid, because all values are char(20)?
混合来自不同域的值总是会引起麻烦。最好的办法是解决潜在的结构问题。糟糕的设计解决起来成本非常高,修复起来也非常昂贵。
这里简单介绍一下这个问题。此类问题最简单的数据完整性约束是外键约束。您不能使用一个,因为“guest”不是 memberid。 (成员 ID 来自一个域;“访客”不是该域的一部分;您混合了来自两个域的值。)使用 NULL 来标识访客没有多大帮助;您无法区分 guest 和缺少 memberid 的成员(member)。 (使用 NULL 来标识任何东西通常不是一个好主意。)
如果您可以使用一个特殊的 20 个字符的成员(member) ID 来识别所有客人,那么这样做可能是明智的。你可能很幸运,因为那个“客人”是五个字母。如果您可以为 guest 使用“guestguestguestguest”而不会完全破坏您的应用程序逻辑,我真的会首先考虑。 (但是,您说这似乎将 guest 视为已登录用户,我认为这会使事情破裂。)
我认为,改造“用户”父类(super class)型是可能的,并且这可能被证明是最好的整体解决方案。父类(super class)型会让您有时将成员和 guest 视为相同的(因为它们并非完全不同),而在其他时候则不同(因为它们并不完全相同)。父类(super class)型还允许个人(成员)和聚合用户(客人都集中在一起)而不会过度紧张。它将统一两个域,因此您可以对成员使用外键约束。但这需要更改程序逻辑。
在表 2 中(请找到一个比它更好的名称),memberid 上的索引或 memberid 和 status 上的复合索引的性能将与您预期的一样好。我不确定复合索引是否有帮助; “status”只有两个值,选择性不强。
all values, except 'guest' are actually foreign keys. Is there any possible way to use this information for increasing the performance?
不,它们不是外键。 (见上文。)真正的外键有助于数据完整性,但不利于 SELECT 性能。
“提高性能”几乎毫无意义。性能是一种平衡行为。如果要提高性能,则需要指定要改进的部分。如果您想要更快的插入,请删除索引和完整性约束。 (不要那样做。)如果你想要更快的 SELECT 语句,建立更多的索引。 (但是更多索引会减慢插入速度。)
您可以通过迁移到可加速所有数据库性能的硬件来加速所有数据库性能。 (咳咳)更快的处理器,更快的磁盘,更快的磁盘子系统,更多的内存(通常)。将关键表或索引移动到固态磁盘可能会让您大吃一惊。
调整您的服务器会有所帮助。但要注意整体表现。不要太专注于加速一个查询而不是降低所有其他查询的性能。理想情况下,编写一个测试套件并在开始测试之前确定什么速度足够好。例如,假设您有一个查询需要 30 秒。什么是可接受的改进? 20秒? 15秒? 2 毫秒听起来不错,但对于需要 30 秒的查询来说不太可能成为目标。 (虽然我已经看到通过迁移到更好的表和索引结构来提高性能。)
关于MySQL : Table optimization word 'guest' or memberid in the column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8157585/
我想从另一个来ping一个vmware guest虚拟机。两者都是Windows XP并使用NAT。我将VMnet8的IP手动设置为192.168.18.1。 (不使用自动获取IP地址)。另外,我无法
我有一台 Windows 服务器,其 AD 通过 AD 连接同步到 Azure AD,用户正在使用 O365。然后,该租户中的某些帐户会作为 guest 帐户被邀请到另一个租户。 当我从 AD 中删除
我已经在 VPS Debian Linux 机器上安装了最新版本的 RabbitMQ。尝试通过访客/访客登录,但返回消息登录失败。我做了一些研究,发现出于安全原因,禁止通过访客/访客远程登录。 我还尝
情况是我尝试在IE8(Win 7 guest 操作系统)中测试网页,由于某种原因我在js ajax中使用的开发环境中使用了很多“http://localhost:8000” url,所以我无法通过知识
我在 VirtualBox 中使用 Ubuntu 18.04,在安装 guest 添加后,我可以在 virtualbox-guest-dkms 和 virtualbox-guest-dkms-hwe
除了一个问题,我刚刚让运行 CentOS 的 guest 盒完美运行。我正在尝试挂载共享文件夹。我已按照使用此代码获取共享文件夹“可安装”的说明进行操作: VBoxManage sharedfolde
我正在尝试将内容从主机复制到 guest 计算机,但为了复制,我需要安装 guest 附加磁盘。 或者还有其他方法可以访问 guest 计算机上的主机内容,反之亦然? 最佳答案 从 VirtualBo
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我正在尝试将内容从主机复制到来宾计算机,但要进行复制,我需要安装来宾添加磁盘。。或者,是否有其他方法可以访问来宾计算机上的主机内容,反之亦然?
关于如何解决该错误的任何想法: 在不支持的计算机上尝试了特定于 guest 的操作准备好与客人沟通。这不应该发生并且是一个错误应该报告。 vagrant up 之后? 最佳答案 如果您尝试在 Wind
我正在尝试使用 Virtual Box、Virtual Box Guest Additions 和 Vagrant 运行 Linux VM,并在我的 Windows 7 机器上安装一个文件夹。我已经尝
首先,使用 QEMU Virtual Machine (Debian Sparc64 Etch 4.0) ,我能够成功地从 Guest 到 Host ( ssh ) 获取 scp 和 MacOS Hi
我正在尝试将 KVM guest (Ubuntu 18.04)添加到本地网络,就像网络中的其他真实服务器一样。我在主机系统(Ubuntu 18.04)中配置了 KVM 桥接接口(interface),
当我使用这个命令时: vagrant up 我得到这个错误: [machine1] GuestAdditions versions on your host (4.3.36) and guest (5
我在我的主机上本地运行 MySQL,并且由于原因™我无法在我的 Vagrant 机器内运行它。我知道有一种方法可以通过 iptables 将所有流量转发到 3306 到主机的 IP 地址和端口来解决这
我已经在两台机器A和B之间建立了rabbitMQ联合,双向, 但是有错误 {auth_failure,"ACCESS_REFUSED - 使用身份验证机制 PLAIN 拒绝登录。有关详细信息,请参阅代
我有一个 Web 项目 GUI.. 我最初只与管理员一起工作。 因此,当管理员使用他的用户名和密码登录时,我使用表单例份验证将他重定向到默认页面“Default.aspx”。 但现在我还必须与 gue
我正在开展一个项目,我必须验证适用于英特尔凌动处理器和 Windows 7 操作系统的平台。 我用过: ManagementClass mgmt = new ManagementClass("Win3
我必须处理这个非常可怕的旧 python 项目,它只能在 Windows xp VM 中运行。有没有办法在主机中使用 pycharm 并连接到 guest 中的解释器(顺便说一句,这是 python
我有一个 PHP 项目,本质上是一家公司的订单处理网站。公司中的每个用户都可以访问该网站,并获得应用程序的特定凭据,以控制对页面和功能的访问。 现在我有一个允许访客访问单个页面的请求。这个请求的复杂点
我是一名优秀的程序员,十分优秀!