簡體   English   中英

查詢大型未索引表

[英]Querying large not indexed tables

我們正在開發類似於CRUD的Web界面,用於外出應用程序。 為此,我們需要顯示來自不同表的數據。 有些很大,非常“活躍”,有很多行(百萬)。 有些是小的配置表。

現在,我們希望允許用戶在顯示的網格上進行過濾,細化,排序,分頁等。 用戶選擇的結果-我們正在構建選擇查詢。

出於明顯的原因,對未索引字段進行過濾將產生運行時間較長的查詢。 另一方面,索引表的每一列看起來有點“怪異”。 而且我們確實有超過50行的表。

我們正在研究Apache Lucene,但據我所知-它很好地幫助我們解決了文本索引問題。 但是數字,日期和范圍呢? 是否有針對該問題的解決方案和討論?

另外,我必須指出,此問題僅針對UX。 對於所有應用程序自己的需求,我們都做得很好

您是正確的,通常來說,您不想在非索引字段上允許使用隨機謂詞,但是這種效果有多大取決於表大小,所使用的數據庫引擎和用於驅動數據庫的計算機。 有些引擎使用非索引列的效果還不錯,但是在最壞的情況下,每個引擎都會退化為順序掃描。 順序掃描並不總是聽起來那么糟糕。

一些想法

  1. 使用列存儲數據庫引擎進行調查,這些存儲是按列而不是按行存儲數據,對於非索引列上的隨機謂詞而言,這可以更快。 列存儲不是通用的解決方案,但是如果您經常需要連續使用所有字段
  2. 為用戶將要查詢的主要列編制索引,並在UX層中指示對某些列的查詢將較慢。 用戶將更容易接受,特別是如果他們事先知道列查詢將很慢
  3. 如果可能的話,就給它扔內存。 當大多數數據庫都適合內存時,像oracle或sql / server這樣的引擎將非常不錯。 唯一的問題是,一旦數據庫超過內存容量,性能就會下降(無警告)
  4. 如果可能,請考慮使用垂直分區。 這樣一來,您就可以將一行分成兩段或更多段進行存儲,從而可以減少謂詞的IO。
  5. 當然,您知道這一點,但是請確保對用於聯接的列進行了索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM