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

自动完成元组

  •  1
  • Emil  · 技术社区  · 15 年前

    我有一个这样的数据库表

    Port Code     | Country   |Port_Name
    --------------------------------------
     1234         | Australia | port1
     2345         | India     | Mumbai
     2341         | Australia | port2
     ...
    

    该表由大约12000个条目组成。我需要自动完成用户输入的查询。现在查询可以是任何一个端口号、国家或端口名。例如,如果用户部分查询为“12”,则应显示下拉列表 1234 | Australia | port1 。我现在面临的问题是,对于每一个用户条目,我都在查询数据库,这使得自动完成非常缓慢。那么,有没有一种方法可以优化这一点?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Emil    15 年前

    在StaskGWT中使用COMBOBOXIOTE,然后重写像这样的COMPBOX项目的GETPcListListFrter标准

    ComboBoxItem portSelect = new ComboBoxItem("PORT_ATTRIB", "") {
    
          @Override
          public Criteria getPickListFilterCriteria() {
            if (getValue() != null && getValue() instanceof String) {
              criteria = new AdvancedCriteria(OperatorId.AND, new Criterion[]{new Criterion("portValue",
                  OperatorId.EQUALS, getDisplayValue())});
            }
            return criteria;
          }
        };
    

    select * from port where portName like '+criteria+%' or portCode like '+criteria+%

        2
  •  1
  •   cuh    15 年前
        3
  •  0
  •   madhurtanwani    15 年前

    数据库索引是否正确?索引列的查找应该非常快-12k行对于任何关系数据库来说都不是什么大事。

    http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html . 这将有助于特别是如果数据不经常变化-所以一次加载到内存表的数据将很快。之后,所有的查询都应该在这个内存表上执行,而且速度惊人。