在数据库中进行搜索的最有效方法

时间:2016-01-05 08:26:28

标签: php jquery database postgresql

我有一个表单页面然后在表单中有电话号码,年龄,邮政编码字段,我有一个生成按钮。当用户生成按钮时,我将自动填充表单中的问题。这些问题是调查问题,需要一些条件,我是否会在表格中显示。

我可以做所有的逻辑。我的问题是我将要解释的最佳方法。

我有Questions表{。}}。

我有id, question, column_header表{。}}。

验证是表单中的电话号码是否已经在抑制表中以及列标题名称时,单击生成按钮时不应显示该问题。

实施例

Suppressions

例如,表单中的电话号码为id, phone, column_header,然后单击生成按钮,我的jQuery和Ajax将处理此问题。我将在每个问题中循环,对于每个问题,我将在Questions id | question | column_header| ___|__________|______________| 1 | test1 | ques1 Suppression id | phone | column_header | ___|_______|_______________| 1 | 1234 | ques1 表中查询当前问题列标题是否已与该电话号码一起存在于该表中,如果确实如此,那么我将不会启用或显示问题。

那将完成这项工作,我担心的是,如果抑制表像数百万条记录一样增长,我有30个问题。因此,对于每个问题,我现在需要搜索抑制表中的百万条记录,以便找到匹配项,如果我需要禁用或启用问题,并且每个ajax调用的进程将会很慢。

有更好的方法吗?我使用PHP Laravel和Postgre作为我的数据库。

2 个答案:

答案 0 :(得分:0)

数百万条记录对RDBMS来说毫无意义。在主SQL语句中使用子查询来查询Suppresion表。过滤count(*)phone后,子查询会返回column_header。然后检查子查询的结果是否为零。只有当子查询的值为零时,才会在Questions表中匹配主SQL。

实施例: select * from Questions where column_header="yyy" 0=(select count(*) from Suppresion where phone="xxx" and column_header="yyy")

答案 1 :(得分:0)

正如tcak指出的那样,数百万条记录对现代数据库来说不是问题,但是考虑如何访问数据仍然有助于思考。

即使没有数百万条记录,您计划的内容也是非常低效的,即使使用小型数据库,网络流量也可能会使您的应用变慢。

相反,由于您知道页面加载时的电话号码,为什么不加载特定电话号码的所有问题并在页面上保留该信息,当您的用户点击一行时,您可以检查您的inbrowser信息。