代码之家  ›  专栏  ›  技术社区  ›  Kimble

Grails多列索引

  •  15
  • Kimble  · 技术社区  · 16 年前

    例如,这似乎根本不起作用: http://grails.org/GORM+Index+definitions

    http://www.grails.org/doc/1.1/guide/single.html#5.5.2.6%20Database%20Indices

    一些工作示例和解释将不胜感激!

    4 回复  |  直到 16 年前
        1
  •  17
  •   dave    16 年前

    对我来说,适用于多列索引的解决方案是:

    class ClassName {
        String name
        String description
        String state
    
        static mapping = {
            name index: 'name_idx'
            description index: 'name_idx'
            state index: 'name_idx'
        }
    }
    

    这将创建一个名为“name_idx”的索引,索引中有三列。

    缺点:这些列在索引中按字母顺序列出,而不是按输入顺序列出。

        2
  •  6
  •   Alex Martelli    16 年前

    要使索引成为多列,请使用逗号分隔符列出列(注意,逗号后没有空格,以避免 this bug . 您指向的第二个URL会出现错误,如图所示:

    index:'Name_Idx, Address_Index'
    

    index:'Name_Idx,Address_Index'
    

    您指向的第一个URL是一个提议的更改(我不相信它目前已经实现,也不知道它的可能性有多大)。

        3
  •  3
  •   Dónal    16 年前

    index 关闭显示 here

    定义单列索引的正确方法 name_idx name

    static mapping = {
          name index:'name_idx'
    }
    

    抱歉,我不知道如何定义多列索引,请尝试 Grails mailing list 如果你在这里没有得到答案。如果无法在域类中直接声明多列索引,则可以在SQL文件中定义它们,如果它们不存在(或删除并重新创建),则由SQL文件创建它们。此SQL文件可以由 init 封闭 Bootstrap.groovy

        4
  •  3
  •   David Tinker    14 年前

    class BootStrap {
    
        DataSource dataSource
    
        def init = { servletContext ->
            if (!MyModel.count()) { // new database
                createIndexes()
                ...
            }
        }
    
        private void createIndexes() {
            Sql sql = new Sql(dataSource)
            sql.execute("create unique index my_index on my_model(col1,col2);")
        }