【问题标题】:Is there a way to create a Clustered Index in Slick?有没有办法在 Slick 中创建聚集索引?
【发布时间】:2014-12-24 22:26:57
【问题描述】:

我正在使用 Slick 创建一个应用程序,它将一堆关于歌曲的记录存储在 Hsqldb 数据库中。

目前我的表定义为:

abstract class DBEnum extends Enumeration {

  def enum2StringMapper(enum: Enumeration) = MappedJdbcType.base[enum.Value, String](
    b => b.toString,
    i => enum.withName(i))
}

class Artist(tag: Tag) extends Table[(Int, String)](tag, "ARTIST") {

  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def name = column[String]("NAME", O.NotNull)

  def nameIndex = index("NAME_IDX", name, unique = true)

  def * = (id, name)
}

class Song(tag: Tag) extends Table[(Int, String, Int)](tag, "SONG") {

  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def name = column[String]("NAME", O.NotNull)
  def artistId = column[Int]("ARTIST_ID")

  def artistFk = foreignKey("ARTIST_FK", artistId, TableQuery[Artist])(_.id)

  def idNameIndex = index("ID_NAME_IDX", (id, name), unique = true)

  def * = (id, name, artistId)
}

object BroadcastType extends DBEnum {

  implicit val BroadcastTypeMapper = enum2StringMapper(BroadcastType)

  type BroadcastType = Value
  val PLAYED = Value("Played")
  val NOW = Value("Now")
  val NEXT = Value("Next")
}

class Broadcast(tag: Tag) extends Table[(Int, Timestamp, BroadcastType.BroadcastType)](tag, "BROADCAST") {

  def songId = column[Int]("SONG_ID")
  def dateTime = column[Timestamp]("DATE_TIME")
  def broadcastType = column[BroadcastType.BroadcastType]("BROADCAST_TYPE")

  def pk = primaryKey("BROADCAST_PK", (songId, dateTime))

  def songFk = foreignKey("SONG_FK", songId, TableQuery[Song])(_.id)

  def * = (songId, dateTime, broadcastType)
}

我仍然只是设置,所以不确定它是否正确,但希望你能明白。

现在我想做的是将复合主键保留在广播表上,但我想在时间戳上创建一个聚集索引。我对该表的大部分查询都将按时间戳上的范围进行过滤。插入行时时间戳会增加,因此为了保持物理顺序,需要对记录进行最少的洗牌。

在 Slick 中创建聚集索引是否有任何抽象?到目前为止,我似乎不得不回退到使用普通 SQL。

【问题讨论】:

    标签: scala hsqldb slick clustered-index


    【解决方案1】:

    是的,您现在必须使用纯 sql。您可以创建功能请求或 PR:https://github.com/slick/slick/issues

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 2017-05-08
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多