問題一:索引是否一定會提高查詢效率?
首先可以很肯定的回答「不一定」,但很明顯,出題者的意圖在於你寫出具體情況和原因。
建立索引的目的是加快對錶中記錄的查詢或排序。
為表設定索引要付出代價的:
一是增加了資料庫的儲存空間;
二是在插入和修改資料時要花費較多的時間(因為索引也要隨之變動)
建立合適的索引,一般情況是會提高查詢效率的,
當然t-sql用不用索引,還要看sql server計算出來的成本,
而且sql server有時候還會生成不好的執行計畫,就算有索引也不會使用它。
另外當查詢結果返回資料量超過表的總資料量的一定比例(一般20%以上)的時候有無索引速度沒有差異
問題二:乙個系統,你使用了一年後,系統響應突然變慢了,請分析變慢的原因
這個可能有很多,最容易出現的是由於資料的增多,缺失索引造成的效能下降會顯同出來,
還有就是對於線性增長的資料量,統計資訊也會更新的越來越慢,導致執行計畫變得很差。
當然具體問題具體分析,需要排查,不僅是db方面,web應用程式池也可能會出故障,變
個就是所謂的調優,調優最小的成本是加索引或修改sql或資料歸檔,這個過程需要判斷
瓶頸,如果是硬體原因)cpu/memory/io),需要公升級硬體解決。
問題三:有乙個很大的表,建立索引一般需要注意些什麼,在什麼字段合理??
很大的表建索引,一般需要考慮建索引的時間、建索引花費的時間、鎖表的時間、
加索引對寫造成的影響、對查詢語句有多大的效能提公升等等。在什麼字段合理,
我估計考者的意思應該是較窄的字段型別,不過具體問題還要具體分析,原則
上雖然是這樣,但實際中卻往往需要找乙個平衡點。
此外在設計階段,可以根據功能和效能的需求進行初步的索引設計,
這裡需要根據預計的資料量和查詢來設計索引,可能與將來實際使
用的時候會有所區別。此外,
關於索引的選擇,應改主意:
a、 根據資料量決定哪些表需要增加索引,資料量小的可以只有主鍵。
b、 根據使用頻率決定哪些字段需要建立索引,選擇經常作為連線條件、
篩選條件、聚合查詢、排序的字段作為索引的候選字段。
c、 把經常一起出現的字段組合在一起,組成組合索引,組合索引的字
段順序與主鍵一樣,也需要把最常用的字段放在前面,把重複率低
的字段放在前面。
d、 乙個表不要加太多索引,因為索引影響插入和更新的速度。
問題不多,後續還會有補充,對於面試,專門建了乙個討論群組,在面試方面相互交流一下的朋友可以加一下,大家一起抱團取暖。
各種面試題 找出三個只出現一次的數
題目 乙個陣列中有三個數字a b c只出現一次,其他數字都出現了兩次。請找出三個只出現一次的數字。分析 在部落格 中我們討論了如何在乙個陣列中找出兩個只出現一次的數字。在這道題中,如果我們能夠找出乙個只出現一次的數字,剩下兩個只出現一次的數字就很容易找出來了。如果我們把陣列中所有數字都異或起來,那最...
筆試題 只出現一次的數
1 給定一陣列,陣列中的數字均為int型別,除了乙個數出現一次,其他都出現了兩次,請找出這個數 2 給定一陣列,陣列中的數字均為int型別,除了乙個數出現一次,其他都出現了三次,請找出這個數 這兩道題,最容易想到的方法就是通過hashmap統計或者先排序後遍歷的方法,但它們要麼需要的空間複雜度高,要...
陣列中三個只出現一次的數字
此文 此問題的相關問題 陣列中兩個只出現一次的數字 題目 乙個陣列中有三個數字a b c只出現一次,其他數字都出現了兩次。請找出三個只出現一次的數字。分析 在部落格 中我們討論了如何在乙個陣列中找出兩個只出現一次的數字。在這道題中,如果我們能夠找出乙個只出現一次的數字,剩下兩個只出現一次的數字就很容...