在我們的組織中,我們需要讓員工通過提供WHERE子句來過濾Web應用程序中的數據。它很長一段時間偉大的工作,但我們偶爾會碰上需要對大型表或低效聯接全表掃描用戶提供查詢等確保僅「合理」查詢
有些小丑會寫類似:
select * from big_table where
Name in (select name from some_table where name like '%search everything%')
or name in ('a', 'b', 'c')
or price < 20
or price > 40
or exists (select 1 from some_other_table where col1 + col2 + col3 = 4)
or exists (select 1 from table_a, table+b)
顯然,這不是用計算值,非索引列,大量OR和table_a和table_b上的無限制連接查詢這些表的好方法。
但是對於用戶來說,這可能是完全有意義的。
那麼,如果允許內部用戶向數據庫提供查詢,同時確保它不會鎖定一打表並將Web服務器掛起5分鐘,最好的方法是什麼?
我猜這是在c#/ sql-server中的編程方式,以便在查詢運行之前獲取查詢的執行計劃。如果是這樣,哪些因素會造成成本?估計的I/O成本?預計的CPU成本?什麼是合理的限制,告訴用戶他的查詢不好?
編輯:我們是一家市場研究公司。我們有數千次調查,每次調查都有自己的數據。我們有數十位研究人員想要以任意方式分割這些數據。我們有工具讓他們使用GUI構建「有效」的過濾器,但一些「高級用戶」想提供自己的查詢。我意識到這不是標準或最佳實踐,但我怎麼可以讓數十個用戶使用任意複雜的條件和不斷變化的條件來查詢他們想要的行的表?
除了在客戶和編寫WHERE子句之間提供某種層次的答案之外,爲常見查詢設置視圖又如何呢? – Zwergner 2010-01-06 19:34:20
我會將數據複製到數據倉庫,讓用戶在那裏分析數據安全的地方。 – CaffGeek 2010-01-06 19:55:00