首页
学习
活动
专区
圈层
工具
发布

Mysql优化
EN

Stack Overflow用户
提问于 2011-09-10 16:34:50
回答 1查看 112关注 0票数 0

我在MySql里有两张桌子

代码语言:javascript
复制
Table_A { pk_A VARCHAR 150 PRIMARY KEY, random_data } ~ 9500 rows
Table_B { pk_B VARCHAR 150, more_random_data } ~ 50000 rows

它们之间的关系是一对多的,pk_A在Table_B上会多次被发现.

我的问题是:

如果我在

  • 上启用索引,php/mysql CRUD运行良好,但是如果禁用对pk_B的索引,则从涉及两个表的命令行进行连接或任何其他查询都需要很长时间的
  • ,但是包含两个表的命令行中的联接或任何其他查询都是瞬时的

如何提高数据库性能(我可以将pk从varchar修改为int(11)),但我想知道是否有其他解决办法可用

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-10 17:12:02

有几件事情可以加速你的查询。正如许多评论所建议的那样,您总是希望将主键保持在合理范围内。一个短的字符串,比如说VARCHAR(10)不会给你带来很大的痛苦,但是比这更大的话,你可能想要使用一个代孕键。通过使自然键是唯一的,而不是在主键中,这可以或多或少地变得透明。

Table_A { pk_A VARCHAR 150主键,random_data }~ 9500行Table_B { pk_B VARCHAR 150,more_random_data }~ 50000行

您的模式可能看起来有点像这样:

代码语言:javascript
复制
CREATE TABLE `Table_A` (
    `id` INTEGER AUTO_INCREMENT PRIMARY KEY,
    `A_name` VARCHAR(150) UNIQUE NOT NULL,
    -- other columns
) ENGINE = InnoDB;

CREATE TABLE `Table_B` (
    `id` INTEGER AUTO_INCREMENT PRIMARY KEY,
    `B_name` VARCHAR(150) UNIQUE NOT NULL,
    `A_id` INTEGER REFERENCES `Table_A`(`id`),
    -- other columns
) ENGINE = InnoDB;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7373072

复制
相关文章

相似问题

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