[英]Do any databases support automatic Index Creation?
為什么數據庫不能根據查詢頻率自動索引表? 是否存在任何工具來分析數據庫及其正在接收的查詢,並自動創建或至少建議要創建哪些索引?
我對MySQL特別感興趣,但我對其他數據庫也很好奇。
這是我在stackoverflow上看到的最好的問題。 不幸的是我沒有答案。 Google的bigtable會自動索引正確的列,但BigTable不允許任意連接,因此問題空間要小得多。
我能給出的唯一答案是:
有一天有人問:“為什么計算機不能只分析我的代碼並編譯並靜態輸入最常運行的代碼片段?”
人們今天正在解決這個問題(例如,FF3.1中的Tamarin),我認為“自動索引”關系數據庫是同一類問題,但它並不是優先考慮的問題。 十年后,手動將索引添加到數據庫將被視為浪費時間。 目前,我們一直在監控慢速查詢和運行優化器。
有數據庫優化器可以啟用或附加到數據庫,以建議(並在某些情況下執行)可能有助於解決問題的索引。
然而,這實際上並不是一個微不足道的問題,當這些輔助工具首次出現時,用戶有時會發現它實際上由於劣質優化而放慢了數據庫的速度。
最后,數據庫架構師在行業中有很多錢,他們更喜歡現狀。
數據庫越來越智能化。 如果您將SQL Server Profiler與Microsoft SQL Server一起使用,您將找到加快服務器運行速度的方法。 其他數據庫具有類似的分析器,並且有第三方實用程序來完成此工作。
但是如果你是編寫查詢的人,希望你能夠充分了解你正在做的事情,以便為正確的字段編制索引。 如果沒有,那么擁有正確的索引可能是你問題最少的......
-亞當
MS SQL 2005還維護基於使用數據創建的建議索引的內部引用。 它不像Tuning Advisor那樣完整或准確,但它是自動的。 研究dm_db_missing_index_groups以獲取更多信息。
有一個腳本我認為MS SQL博客上有一個用於在SQL 2005中建議索引的腳本,但我現在找不到確切的腳本! 我記得它只是描述中的東西。 這里有更多信息的鏈接http://blogs.msdn.com/bartd/archive/2007/07/19/are-you-using-sql-s-missing-index-dmvs.aspx
PS僅適用於SQL Server 2005 +
是的,一些引擎支持自動索引。 一個這樣的mysql示例是Infobright,它們的引擎不支持“常規”索引,而是隱式索引所有內容 - 這是一個基於列的存儲引擎。
這些引擎的行為往往與開發人員的行為大不相同(而且,是的,您甚至不需要考慮使用Infobright的開發人員;它不是標准引擎的插件替代品)。
這里有工具。
對於MS SQL,使用SQL事件探查器(記錄針對數據庫的活動),以及數據庫引擎優化顧問(SQL 2005)或索引優化向導(SQL 2000)來分析活動並推薦索引或其他改進。
似乎MySQL沒有用戶友好的分析器。 也許你想嘗試像這樣 ,基於MySQL的探查一個PHP類。
Amazon的SimpleDB根據您的使用情況對所有列進行自動索引:
http://aws.amazon.com/simpledb/
它有其他限制:
10gb的限制比許多人想象的要大,所以你可以繼續這個,為一個你計划重寫的簡單網站,如果它有點大。
不幸的是,這種自動索引沒有進入DynamoDb,它似乎取代了它 - 他們甚至不再在他們的產品列表中提到SimpleDb,你必須通過它的舊鏈接找到它。
我同意Adam Davis在評論中所說的話。 我要補充一點,如果存在這樣一種自動創建索引的機制,對這個特性的最常見的反應是,“那很好......我怎么把它關掉?”
部分原因可能是索引不僅僅提供了一個小的加速。 如果在大型表上沒有合適的索引,則查詢運行速度太慢,以至於應用程序完全無法使用,並且如果它與其他軟件交互,則它可能無法正常工作。 因此,在開始嘗試使用該應用程序之前,您確實需要索引。
此外,不是在后台構建索引,而是在構建索引時進一步降低速度,最好在開始添加大量數據之前定義索引。
我相信我們會獲得更多的工具來獲取樣本查詢並找出必要的索引; 也許我們最終會得到按照你的建議做的數據庫並監控性能並添加他們認為必要的索引,但我不認為它們會成為正確索引的替代品。
Google App Engine就是這樣做的(請參閱index.yaml文件)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.