检测笛卡尔积或其他不明智的查询

时间:2011-03-15 15:46:33

标签: sql code-generation database

我正在开发一种产品,它为用户提供了很多创建sql的“灵活性”,即他们可以轻松地设置查询,使系统能够使用过度包含的where子句。

我希望能够在可能的情况下警告用户,并且我想知道是否有任何已知的策略可以智能地分析可以用于此目的的查询?

1 个答案:

答案 0 :(得分:1)

我感觉到你的痛苦。我过去曾经承担过类似的任务。在要求SQL的所有特性和功能的用户之间不断斗争,同时也抱怨它太复杂,没有帮助他们,也没有阻止他们做愚蠢的事情。

在查询中添加分页不会阻止执行错误查询,但会减少损坏。如果您只显示从SELECT * FROM UNIVERSE返回的前50条记录,并提供分页到下一页等的能力,依此类推,您可以避免内存不足问题并降低性能损失。

我不知道它是否适合您的数据/业务领域;但是当用户不提供表连接时,我强制添加表连接。如果查询包含表A和表B,则A.ID需要等于B.ID;我添加它。

如果您不介意编写特定于数据库的代码,我知道您可以从数据库中获取有关查询的数据(Oracle中的Explain Plan - http://www.adp-gmbh.ch/ora/explainplan.html)。您可以首先在其查询上执行计划,并使用其结果来提示或警告用户。但细节将根据您使用的数据库而有所不同。