首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同表的键

问不同表的键
EN

Stack Overflow用户
提问于 2012-11-09 03:18:47
回答 1查看 43关注 0票数 1

我有这样一个log表,它在MySQL数据库中保存我所有表的所有日志:

代码语言:javascript
复制
+-------+-----------+-------------+-------------+-----------+--------+
| LogID | LogTypeID | LogDateTime | ReferenceID | TableName | UserID |
+-------+-----------+-------------+-------------+-----------+--------+
|     1 |         1 |  2012-10... |           1 |    client |      1 |
|     2 |         1 |  2012-10... |           1 |      plan |      1 |
|   ... |       ... |         ... |         ... |       ... |    ... |
+-------+-----------+-------------+-------------+-----------+--------+

当我在数据库中插入、更新或删除由我的log列标识的表时,LogTypeID表将保存所有日志。ReferenceID列是在我的TableName列中标识的表的主键,我的所有int(10)键都有相同的int(10)类型,对于ReferenceID列也是一样的。

我总是使用我的log表来识别何时插入这些数据,所以我无法清除日志。

我一开始对此没有任何问题,但是现在我的查询在使用log 表时变得很慢,因为有很多数据。i 努力提高我的数据库服务器的性能和它变得比以前快了一点,但仍然很慢。我的大多数查询都是INNER JOIN对log表的查询。

我考虑在使用ReferenceID表的所有表中添加一个外键,因为我认为Keys可以提高查询的性能,但我不确定它是否可行。

我可以将我的ReferenceID列作为所有表的外键吗?

我的数据库服务器是MySQL服务器5.5.25,我的表都是InnoDB。

请帮忙,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-09 03:23:53

如果我正确理解并且ReferenceID持有不同的表PRIMARY KEY值,您将无法将其定义为FOREIGN KEY,因为FOREIGN KEY约束只能引用单个表,不能基于其他列值进行切换。

相反,您可以为每个ReferenceID和TableName创建一个索引,甚至可以为它们创建一个复合索引:

代码语言:javascript
复制
CREATE INDEX `idx_referenceid` ON `log` (`ReferenceID`);
CREATE INDEX `idx_tablename` ON `log` (`TableName`);

或者作为跨两列的复合索引,假设您总是需要同时对log进行查询。

代码语言:javascript
复制
CREATE INDEX `idx_referenceid_tablename` ON `log` (`ReferenceID`,`TableName`);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13301623

复制
相关文章

相似问题

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