十幾年來使用的主要數(shù)據(jù)庫就是MS SqlServer,對于提高查詢速度的方法也考慮了很多,如果具體到建表這個條件,能采取的措施主要如下:
- 選擇好數(shù)據(jù)庫主鍵,主鍵作為聚集索引,直接決定了數(shù)據(jù)存儲的格式和順序,它對于提高查詢速度,特別是能利用上主鍵的查詢,具有決定性的意義。
- 合理建立索引,除了主鍵,其他非聚集索引就是最重要的因素了,如果某項(xiàng)查詢能命中一個索引,查詢速度會有幾倍甚至幾十倍的提升,但是索引也是有代價的,它一是會對存儲有影響,會占用額外的空間,二是對于增刪改操作都有可能引起索引的變化,從而減少這些操作的執(zhí)行效率。所以,要根據(jù)預(yù)期的業(yè)務(wù)情況,合理建立索引,也可以在系統(tǒng)運(yùn)行一段時間后,根據(jù)實(shí)際業(yè)務(wù)需要,再建立索引。
- 冗余字段的設(shè)計(jì),對于特定的業(yè)務(wù),有時需要多表連接查詢,這時候有可能會影響查詢效率,為了提高查詢速度,也可以酌情加上冗余字段,把多表查詢變成單表查詢,這在提高速度的同時,也會代理存儲和數(shù)據(jù)一致性的問題,需要通盤考慮。
- 字段類型的選擇,這個影響較小,具體的業(yè)務(wù)要求不同,有時候也需要考慮,比如對于主鍵或其他需要做比較的字段,一個整形的類型,查詢效率會高于一個字符串,不過,不能因此影響業(yè)務(wù)的實(shí)現(xiàn)。
- 分表,對于特別大的,隨時間累計(jì)的數(shù)據(jù),可以分表來處理,比如每個月份建一個表,表結(jié)構(gòu)完全一樣,查詢時根據(jù)時間段來決定從哪些表查詢,這會大幅提高查詢效率,但是數(shù)據(jù)維護(hù)邏輯會變的復(fù)雜一些。
- 數(shù)據(jù)分區(qū),這種方式和分表有點(diǎn)相像,但是最好和物理磁盤配合,充分利用多磁盤并發(fā)讀取的優(yōu)點(diǎn)。
- 內(nèi)存表,sqlserver2014后,提供了內(nèi)存表的概念,在特定情況下,可以把所有的數(shù)據(jù)都加載到內(nèi)存中,極大提高存取速度,不過這種有一定的限制,不能作為通用的優(yōu)化方法。
- 業(yè)務(wù)邏輯設(shè)計(jì),在設(shè)計(jì)業(yè)務(wù)邏輯的時候,就充分考慮實(shí)體對象之間的關(guān)系,合理建立實(shí)體表和關(guān)系表,這也和具體的業(yè)務(wù)有關(guān)系,需要具體分析。
其實(shí),很多時候,優(yōu)化還要通盤考慮,特別是在應(yīng)用端,也有很多優(yōu)化措施,比如緩存、分頁、存儲過程利用、大數(shù)據(jù)統(tǒng)計(jì)臨時表等,結(jié)合數(shù)據(jù)庫的特點(diǎn),共同來提高查詢速度。
贊同0