2013-10-05 58 views
0

我有一個龐大的數據庫,它只有選擇語句。有不同的應用程序使用它。 15列中有12列正在這些應用中使用。建議在Index中使用這12列嗎?如果否,那麼問題是什麼?索引表中的所有列

請注意,插入或更新只會每週發生一次或兩次。這個想法是刪除所有這些索引,並在表加載後重新創建。

感謝您的幫助。

+1

您正在使用哪些DBMS? Postgres的?甲骨文? –

+0

我使用Sql Server ... – RakeshP

回答

2

這取決於什麼論文列被用於:

索引列使用更多的磁盤空間,內存和降低INSERT和UPDATE速度爲SQL引擎必須更新索引。

當您檢索數據並且在WHERE,JOIN,GROUP BY或ORDER BY中使用索引字段時,索引會爲您帶來巨大的速度增益。

如果表格很大,那麼12個索引列可能會使用大量磁盤空間和內存,並有效減慢任何數據檢索速度。最好的做法是使用性能調諧器來確定哪些索引可以爲您帶來最大收益。

但是,它確實取決於您的應用程序。雖然索引列的比例如此之高是不尋常的,但它可能適用於您的情況。

+0

謝謝你的回覆。我想知道幾個最好的性能調諧器,以區別於SQL pro-filer和調優顧問。 – RakeshP

+0

對於SQL服務器,SQL pro-filer和優化顧問是我用過的最好的。不過,我確信其他人可能會建議其他選項 – JustinHui

+0

酷..非常感謝你的回覆 – RakeshP

2

@JustinHui給出了一些很好的見解,由於您的情況是隻讀的,所以如果您有空間的話,您絕對可以索引所有列。

但在此之前,請使用較小但相當大的一部分數據進行測試。從那些在WHERE,JOIN,GROUP BY和ORDER BY中引用比其他列更頻繁的列開始,看看你找到了哪些改進。如果需要,請逐步增加。我猜想某些索引是矯枉過正的,但只有測試才能證明它。

最後,如果你想索引一切,空間是一個問題,你總是可以用Apache Solr看看數據庫外部。一旦你掌握了它,你可以索引everything,甚至爲用戶提供很酷的分面搜索。你只需要每週重建一次或兩次Solr索引。

希望有所幫助。

+0

感謝您的時間回答我的查詢。應用程序使用幾乎所有類型的連接,where和order by子句取決於業務邏輯並使用所有12列,因此沒有特定的順序,我可以說。我所能做的就是嘗試不同的索引方式並查看性能。 – RakeshP