有没有办法在Slick中创建一个聚类索引?

问题描述:

我正在使用Slick创建一个应用程序,该应用程序存储一串关于Hsqldb数据库中歌曲的记录。有没有办法在Slick中创建一个聚类索引?

目前我的表被定义为:

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。

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