×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

你能不能问问说必须加clustered index的人要个出处?我review的data model design里如果有clustered index,绝对是个red flag,理由见内。但是,我不是“根正苗红”的DBA,算不上权威,如果有不同的意见,我倒是非常乐意听一听。

本文发表在 rolia.net 枫下论坛我假定我们是在data model design的层面讨论,也就是通常designer和DBA的角度。Clustered index显式定义数据的存储顺序,或者说,override数据库的决定,经常是错误的。大方向上说,数据的物理存储顺序应该是数据库根据逻辑model决定的,而不是model这一层所关心的。具体的说,需要clustered index经常是以下几种错误:

1. 画蛇添足。不同的数据库根据自己的implementation,大多数情况下,能够推断出正确的存储顺序。比如,有primary key的用primary key,没有primary key的,再看unique index,等等。如果你的定义和数据库的选择是一样的,不仅仅是无用功,更是影响移植性和以后数据库升级,因为你现在的选择再以后的版本就不一定正确了。

2. model本身有问题。在数据库没法正确推断的时候,经常是“it doesn't matter"。比如,多对多的关系表,两边的foreign key当然要index了,但是有没有必要非要定义个clustered index呢?我还真没碰到过。如果“it matters”,很可能是model有问题了。

3. 解决不了问题。我上面提到过传统的OLAP,主要是star schema的fact tables,经常是denormalized,index很多,但是没有unique的。这时,clustered index是最naive的"办法“,但是解决不了问题。比如,有5个常用的dimension index,你选哪一个都不够。data warehouse的产品都是用别的办法解决的。更多精彩文章及讨论,请光临枫下论坛 rolia.net
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术讨论 / 我们公司的DBA Manager说: 一个表, 如果只有non cluster index, then it makes no sense. 真的是这样吗? 就是必须有一个cluster index?
    • 说的没错。可以不加index,既然用了index,至少要一个cluster的。
    • 什么数据库?
    • as long as you could add indexes to the table, you should have clustered index. period.
    • Not really, a heap table is table without cluster index but with a or more non cluster indexes.
      • You did not understand the question. Heap tables do exist, but it's something that should be avoided in design.
        • Although in most cases we should use clustered index table, the heap tables are useful in some cases.
    • 简单的说,不仅不必须,而且经常是anti-pattern。具体一点说,OLTP里基本上不应该加,传统的ETL based OLAP,往往这么做。但是现在OLAP的潮流是Big Data,能不能要不要用cluster index,应该具体情况具体分析。
      • 已经决定加index了. 在这种前提下, 必须有一个clustered index. 这才是要问的.
        • 你能不能问问说必须加clustered index的人要个出处?我review的data model design里如果有clustered index,绝对是个red flag,理由见内。但是,我不是“根正苗红”的DBA,算不上权威,如果有不同的意见,我倒是非常乐意听一听。
          本文发表在 rolia.net 枫下论坛我假定我们是在data model design的层面讨论,也就是通常designer和DBA的角度。Clustered index显式定义数据的存储顺序,或者说,override数据库的决定,经常是错误的。大方向上说,数据的物理存储顺序应该是数据库根据逻辑model决定的,而不是model这一层所关心的。具体的说,需要clustered index经常是以下几种错误:

          1. 画蛇添足。不同的数据库根据自己的implementation,大多数情况下,能够推断出正确的存储顺序。比如,有primary key的用primary key,没有primary key的,再看unique index,等等。如果你的定义和数据库的选择是一样的,不仅仅是无用功,更是影响移植性和以后数据库升级,因为你现在的选择再以后的版本就不一定正确了。

          2. model本身有问题。在数据库没法正确推断的时候,经常是“it doesn't matter"。比如,多对多的关系表,两边的foreign key当然要index了,但是有没有必要非要定义个clustered index呢?我还真没碰到过。如果“it matters”,很可能是model有问题了。

          3. 解决不了问题。我上面提到过传统的OLAP,主要是star schema的fact tables,经常是denormalized,index很多,但是没有unique的。这时,clustered index是最naive的"办法“,但是解决不了问题。比如,有5个常用的dimension index,你选哪一个都不够。data warehouse的产品都是用别的办法解决的。更多精彩文章及讨论,请光临枫下论坛 rolia.net
    • 这句话在不同的语言环境里,有不同的含义。
      如果你是新手,那么对方是正确的。

      如果你很确定知道自己在做什么,那么对方很可能是老黄历了。

      如果是后面那种情况,你可以收集一些证据,来说服他,证明自己。
    • 各位高手们,这个叫clustered index,不是cluster index。。。低手打酱油路过
      • 哪里哪里, 这个坛子里你最高.
      • 汗一个。:(
    • this is really a bad dba manager. this is why so many system did not perform well. it is really need to understand what the major use case for the table.