当插入具有特定关键字的行时向用户发送通知

时间:2018-07-30 08:47:28

标签: sql sql-server azure azure-sql-database

我正在Azure上使用SQL Server,并希望使用户能够定义关键字,并且当标题与这些关键字之一匹配的文章时,用户将收到警报。

当然可以有100.000个用户,每个用户定义了100个关键字。

每次插入文章时进行这样的查询显然是不可行的。

我的想法是创建一个可以每小时运行一次的工作,但是由于很多原因,这也使我感到不理想,我想知道是否有人会建议一个更好的选择。理想情况下,不仅要使用azure基础架构,而且要使用基于SQL的解决方案。

2 个答案:

答案 0 :(得分:0)

这是一个有关如何在SQL中查询大量数据的问题。

根据您的描述,我们可以使用数据库索引来提高查询性能。

我们可以在关键字字段中创建索引,并使用T-SQL,如下所示:

Select count(1) From T Where Keyword = XXX

通过这种方式,数据库引擎将使用索引而不是全表扫描。

在Azure SQL Db中,我们可以使用T-SQL创建索引:CREATE INDEX (Transact-SQL)

我们还可以使用SSMS创建索引,有关Azure SQL Db中索引的更多信息,我们可以参考:Clustered and Nonclustered Indexes Described

以下是一些数据库查询的优化方法,希望对您有所帮助:

1. To optimize the query, avoid full table scanning as much as possible, and first consider indexing the columns involved in where and order by.


2. The null value judgment of the field in the where clause should be avoided as far as possible. Otherwise, it will cause the engine to abandon the index and scan the whole table, such as:

Select id from t where num is null

You can set a default value of 0 on num to ensure that there is no null value in the num column in the table.

Select id from t where num=0


3. try to avoid using "=" or "> operator in the where clause, otherwise the engine will discard the index and perform the full table scan.


4. Use or to join conditions in where clauses should be avoided as far as possible, otherwise it will cause the engine to abandon the use of the index and perform a full table scan, such as:

Select id from t where num=10 or num=20

It can be inquired like this:

Select id from t where num=10

Union all

Select id from t where num=20


5.in and not in should also be used with caution, otherwise the whole table will be scanned, such as:

Select id from t where num in (1,2,3)

For continuous values, use between instead of in:

Select id from t where num between 1 and 3

The query under 


6. will also result in full table scan:

Select id from t where name like'%abc%'

In order to improve the efficiency, the full text retrieval can be considered.

答案 1 :(得分:0)

您可以在用例中使用Logic Apps

逻辑应用程序中有一个SQL connector,可轻松满足您的要求。

我在下面做了一个样本

enter image description here

说明

  1. 在将任何项插入特定表(Customer_Feedback)中为SQL表创建触发器

  2. 执行存储过程(操作)并从中获取结果/输出。存储过程可以是一个简单的select语句,满足您搜索关键字的要求。请确保按照上面的Lee Liu答案进行索引

  3. 添加一个条件,该条件将使用相应的Keyword

  4. 检查存储过程的输出
  5. 如果条件满足,然后通过send mail task

  6. 向该用户发送邮件

您还可以用自己的创造力修改此流程。