我正在使用Postgres数据库,我无法控制管理。我正在构建一个日历,用于查看特定日期的资源(物理项目)是在线还是离线。不幸的是,如果他们处于离线状态,我只能通过在文本字段中查找资源名称来确认。
我一直在使用
select * from log WHERE log_text LIKE 'Resource Kit 06%'
问题在于,当我们使用LIKE 180次(每天至少6个资源)构建日历时,速度很慢。有没有人知道加快这种情况的方法(请记住我不能修改数据库)。另外,如果我在数据库端没有什么可以做的,那么我在php端可以做些什么吗?
答案 0 :(得分:1)
我认为,这需要某种形式的缓存。由于您无法更改数据库中的任何内容,因此您唯一的机会是从中提取数据并以更易于访问和更快的形式存储它。这在很大程度上取决于插入表格的数据频率。如果有多个插入而不是选择,它可能不会有多大帮助。其他方式可以提高性能。
也许你可以考虑使用Lucene搜索引擎,它能够进行全文索引。有来自Zend的实现,甚至Apache也有一些http service。但我没有机会测试它。
如果你不使用强大的东西,你可以在php中编写自己的缓存机制。它不会像postgres一样快,但可能比没有索引的LIKE查询更快。如果您的查询需要更加柔和(条件,分组,排序......),您可以使用基于文件的SQLite数据库,并且不需要在服务器上运行额外的服务。
另一种方法可能是在数据库中使用触发器,这可以在插入数据时以更加索引的方式将所需信息存储到其他表中。但是没有管理数据库的权利,它可能已经死路一条。
如果您需要更具体的信息,请更具体地说明您的问题。