2011-03-15 41 views
2

我正在研究一種產品,它爲用戶提供了很多「靈活性」來創建sql,即他們可以輕鬆設置查詢,從而可以將系統帶到超過包容性的地方條款。檢測笛卡爾產品或其他非顯而易見的查詢

我希望能夠在用戶遇到這種情況時提醒用戶,我想知道是否有任何已知策略可以智能分析可用於此目的的查詢?

回答

1

我感到你的痛苦。我過去曾經負責類似的事情。在用戶要求SQL的所有特性和功能的同時,也抱怨它太複雜,不利於他們,並不妨礙他們做出愚蠢的事情。

在查詢中添加分頁不會阻止執行錯誤的查詢,但會減少損壞。如果您只顯示從SELECT * FROM UNIVERSE返回的前50條記錄,並且能夠分頁到下一個50等等,則可以避免內存不足問題並降低性能。

我不知道它是否適合您的數據/業務領域;但是當用戶不提供它們時,我會強制添加表連接。如果查詢包含TABLE A和TABLE B,則A.ID需要等於B.ID;我添加它。

如果您不介意編寫特定於數據庫的代碼,我知道您可以從數據庫中獲取有關查詢的數據(Oracle中的Explain Plan - http://www.adp-gmbh.ch/ora/explainplan.html)。您可以先在他們的查詢上執行計劃,然後使用其結果來提示或警告用戶。但細節取決於您使用的是哪個數據庫。

+0

好吧,更糟糕的是,有些批處理作業必須對某些表格的全部數據進行操作,因此在這種情況下分頁並不重要,而且對於某人完全連接系統非常容易。我一直在改變事情以瀏覽數據,所以我唯一能做的就是當我認爲它非常高時,報告結果與批量大小的比率。 – barrymac 2011-03-16 09:43:19