Sql Query加入建议

时间:2011-08-23 02:42:58

标签: mysql sql

我想知道什么时候有一个父表和一个带有外键的子表,如:

users
id | username | password |

users_blog
id | id_user | blog_title

是否可以在连接表(users_blog)上使用id作为自动增量,或者我是否会遇到查询速度问题?

我还想知道哪些字段要添加为PRIMARY,哪些字段作为INDEX在users_blog表中?

希望问题很清楚,抱歉我的英语不好:P

6 个答案:

答案 0 :(得分:2)

用户和user_blog之间的基数是什么?如果它是1:1,为什么在user_blog表中需要id字段?

答案 1 :(得分:2)

我认为您实际上不需要users_blog表中的id列。我会将id_user作为该表的主索引,除非你有另一个原因(也许users_blog表实际上有更多列而你只是没有向我们显示它?)。

就性能而言,在users_blog表中使用id列不应该单独影响性能,但是您的查询永远不会使用此索引,因为您不太可能根据该列选择数据。将id_user列作为主索引实际上对您有利,并且会加快您的连接和选择。

答案 2 :(得分:2)

  

是否可以在连接表(users_blog)上使用id作为自动增量   或者我的查询速度有问题吗?

字段是否自动增加不会影响您检索数据库中已有数据的速度。

  

我也想知道哪些字段要添加为PRIMARY,哪些字段为   users_blog表中的INDEX?

PRIMARY KEY(和其他约束)的目的是强制数据的正确性。索引“只是”表现。

那么PRIMARY KEY中的字段取决于您希望用数据模型表达的内容:

  • 如果仅用users_blog标识id行(即这两个表之间存在“非标识”关系),则将id单独放在PRIMARY KEY中。
  • 如果它是由id_userid(又称“识别”关系)的组合识别出来的,那么您将在PK中将这两个字段放在一起。

从索引开始,这取决于您将如何访问数据。例如,如果您执行了许多JOIN,则可以考虑id_user上的索引。

有关索引性能的优秀教程可在以下网址找到:

http://use-the-index-luke.com

答案 3 :(得分:1)

id上的自动增量users_blog列没有任何问题。

主键可以是id_user, id。至于索引,这在很大程度上取决于您的使用情况。

我怀疑你的博客引擎会遇到任何与数据库相关的性能问题,所以索引与否并没有太大的区别。

答案 4 :(得分:1)

您不必在users_blog表中使用id列,您可以将id_user与users表一起加入。自动增量也不是性能问题

答案 5 :(得分:-1)

  • 最好有一个自动递增的标识符列 - 这保证了一种唯一标识行的方法(如果所有其他列对于两行都相同)
  • id是所有表键的好名称,它是标准的
  • <table>_id是外键的标准名称 - 在您的情况下使用user_id(不是id_user
  • mysql自动为定义为主键或外键的列创建索引 - 此处无需执行任何操作
  • 恕我直言,表名应该是单数 - 即user而不是users

你应该看起来像SQL:

create table user (
    id int not null auto_increment primary key,
    ...
);

create table user_blog (
    id int not null auto_increment primary key,
    id_user int not null references user,
    ...
);