首页 文章

SQL - 主键,聚簇索引,自动增量

提问于
浏览
2

我的网站显示DATE的帖子,即使SQL表是按ID排序的 . 由于ID的顺序并不总是与DATE的顺序相同,因此我使用 ORDER BY 'DATE' 运行查询 .

SQL Table Example:

----------------------------
| ID | DATE                |
----------------------------
| 1  | 2011-10-20 00:00:00 | 
| 2  | 2012-10-20 00:00:00 |
| 3  | 2010-10-20 00:00:00 |
| 4  | 2011-09-20 00:00:00 |
----------------------------

To query I use: SELECT * FROM `table` ORDER BY 'DATE';

我的问题:

  • Would it benefit the query performance if the cluster index or primary key of the table was the DATE column?

  • Is it possible to have the ID column auto-increment when it is not the primary key?

我想要做的是尽可能快地进行查询(我认为可以通过使DATE成为集群索引或主键),但也允许每个帖子具有唯一的自动增量ID . 我试图让DATE成为主键,但我得到一个错误,说“只能有一个自动列,必须将其定义为键” .

2 回答

  • 3

    我不会将日期定义为主键,而是在字段上添加索引 . 如果需要,独特 . 我相信可以在非主键字段上进行自动增量,但是自己尝试会给你最好的答案!

    < - 编辑 - >

    要回答你的评论问题,我不能说它是一个不好的想法,但日期总是挑剔 . 一次,您必须决定是使用UTC还是本地日期,预览夏令时如何影响您的程序,预测在应用程序生命周期的某个时间是否需要更新日期,以及类似的事情 . 我宁愿忘记这一点,只需使用独特的自动生成密钥 . 如果您确实将日期作为PK,则可以使用时间戳并避开第二个序列列 .

    我在techtarget.commade2mentor.com找到了关于日期作为主键的更多信息 .

  • 0

    如果进入它的值是无序的,那么索引很好 . 不强制但很好 . 因为它们是树,如果索引只是一个自动增量列,你每次重新生成索引时都会从一开始就得到一个不 balancer 的树,因为它只会被添加到一个叶子中,所以总是会增加不 balancer 树的(直到索引页面已满) .

    对于自动增量字段上的聚簇索引(默认情况下,Sybase,MS SQL以及其他所有主键都是主键),进行相对频繁的索引重建可能是个好主意 . 我的理念是聚集在最常见的扫描上 . 所以我可能会将我的主键设置为ID列,但是我会在DATE上进行聚类,所以当我选择从表中选择日期或选择...按日期排序时,查询将在读取页面时扫描连续的项目关闭磁盘 .

相关问题