首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL性能设计

SQL性能设计
EN

Stack Overflow用户
提问于 2012-01-04 06:53:50
回答 2查看 81关注 0票数 0

我对SQL很陌生,我有一个关于性能的基本问题。

我希望创建一个用户数据库,该数据库将存储有关我的用户的信息:

  • Id
  • 登录名
  • 密码
  • 实名

稍后,我想对: Id、登录名和实名执行SELECT查询。

该数据库的最佳设计是什么,应该创建哪些表和键?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-04 06:58:05

如果只有这4个字段,它看起来就像一个表。ID上的主键,LoginName上的唯一索引。您可能不想存储密码,但只想存储散列。

根据查询的不同,创建不同的索引。此外,您可能根本不需要ID字段。

更新:在特定列上创建索引的使数据库能够优化其SQL语句。给定您的用户表:

代码语言:javascript
复制
USER
    USER_ID BIGINT NOT NULL
    LOGIN_ID VARCHAR(<size>) NOT NULL
    PASSWORD VARCHAR(<size>) NOT NULL
    NAME VARCHAR(<size>) NOT NULL

CONSTRAINT PK_USER PRIMARY KEY ( USER_ID )

我知道的数据库将自动在主键上创建索引,这实际上意味着数据库维护一个优化的查找表,请参阅WikiPedia获取更多详细信息。

现在假设您希望通过LOGIN_ID查询用户,这是一个相当常见的用例,我想您可以创建另一个索引,如:

代码语言:javascript
复制
CREATE INDEX I_USER_1 ON USER ( LOGIN_ID asc )

上述索引将优化select * from USER where LOGIN_ID='foo'。此外,您可以创建一个唯一的索引,前提是您不希望复制LOGIN_ID

代码语言:javascript
复制
CREATE UNIQUE INDEX UI_USER_1 ON USER ( LOGIN_ID asc )

这就是全部,所以如果您想优化对用户实名(NAME)的查询,只需创建另一个索引:

代码语言:javascript
复制
CREATE INDEX I_USER_2 ON USER ( NAME asc )
票数 2
EN

Stack Overflow用户

发布于 2012-01-04 10:40:16

为了添加到@homes的答案,您应该知道您将运行什么样的查询,然后对这些查询进行优化。例如,如果您正在做大量的写操作,而没有那么多的读取,那么拥有大量的索引会导致性能问题。这有点像为一辆汽车调整发动机,你是要快速地沿着拖曳带前进,还是在为长途行驶而调整它。

不管怎样,您还询问了名称列的内容。如果要在varchar列上进行匹配,则可能值得研究全文索引的使用。

http://msdn.microsoft.com/en-us/library/ms187317.aspx

这允许您对名称进行优化搜索,在这些名称中,您可能会匹配某个名称的部分,等等。正如@home回答说的那样,它确实取决于您在编写查询时的查询和意图。

可能值得在SQL management之类的查询中创建表并使用查询执行计划,并查看索引对正在发生的行数和某种查找的影响。

http://www.sql-server-performance.com/2006/query-execution-plan-analysis/

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

https://stackoverflow.com/questions/8723123

复制
相关文章

相似问题

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