Вы можаце паскорыць доступ да дадзеных табліц, калі будзеце рацыянальна выкарыстоўваць індэксы і буферызацыю. Акрамя таго, можаце выкарыстоўваць тэхналогію Rushmore Query Optimization для аптымізацыі вашых запытаў.
Для таго, каб паскараць доступ да дадзеных ў табліцы, выкарыстоўвайце індэкс. Даданне індэкса да табліцы паскарае пошук дадзеных у ёй, асабліва пры-майстэрску ўжыванні тэхналогіі Rushmore для аптымізацыі гэтага пошуку. Акрамя таго, індэксаванне дазваляе Вам, каб працаваць з дадзенымі, адсартаваных ў патрэбным парадку; напрыклад, пры праглядзе можна адсартаваць табліцу пакупнікоў па прозвішчы.
Калі запісы ў табліцы ўтрымліваюць унікальныя ключы, то стварыце для ключавога поля першасны індэкс ці індэкс-кандыдат. Гэтыя тыпы індэксаў дазваляюць Visual FoxPro правяраць правільнасць ключоў на нізкім узроўні (без праграмавання), што забяспечвае найбольшую прадукцыйнасць.
Дадаткова да індэксавання палёў, якія выкарыстоўваюцца для пошуку і сартаванні, вы павінны праіндэксаваць поля, уключаныя ў аперацыю аб'яднання (join) табліц. Калі вы аб'ядноўваеце дзве табліцы з дапамогай неиндексированных палёў, то такая аперацыя можа запатрабаваць на сваё выкананне ў сотні разоў больш часу.
Важнай асаблівасцю Visual FoxPro з'яўляецца магчымасць стварэння індэкса па любым выразе. (У некаторых сістэмах кіравання базамі дадзеных дапускаюцца індэксы толькі па палях). Гэтая магчымасць дазваляе вам прымяняць індэксы для аптымізацыі пошуку, сартавання і аперацый аб'яднання, выкарыстоўваючы камбінацыі палёў або фарміруючы з палёў выразы. Напрыклад, вы можаце індэксаваць поле Імя, якое базуецца на выразе, які выкарыстоўвае функцыю SOUNDEX () . Такім спосабам ваша прыкладанне можа забяспечыць хуткі доступ да імёнаў, якія гучаць аднолькава.
Пры дадатку індэксаў у табліцы, вы павінны падтрымліваць баланс паміж выгадай, якую вы атрымаеце ў часе пошуку, і непазбежнымі стратамі, якія ўзнікнуць пры абнаўленні праіндэксаваных табліц. Як толькі вы дадасце індэксы да сваіх табліцах, адразу ж аперацыі абнаўлення і ўстаўкі запісаў у табліцы пачнуць выконвацца павольней па той прычыне, што Visual FoxPro вымушаны будзе абнаўляць кожны індэкс.
І нарэшце, пазбягайце выкарыстоўваць індэксаванне па палях, якія ўтрымліваюць толькі абмежаваную колькасць дыскрэтных значэнняў, напрыклад, па лагічным палях. У гэтым выпадку, індэкс будзе ўтрымліваць мала дадзеных, і, верагодна, накладныя выдаткі па падтрыманні індэкса пераважаць тую карысць, якую вы атрымаеце ад такога індэкса пры пошуку.
Адносна дэталяў эфектыўнага індэксавання пры выкарыстанні тэхналогіі Rushmore вы можаце звярнуцца да падзелу Выкарыстанне аптымізацыі запытаў Rushmore для паскарэння доступу да дадзеных .
Пры стварэнні аб'яднанняў з дапамогай каманды SELECT - SQL наступныя сітуацыі могуць знізіць прадукцыйнасць і прывесці да непрадказальных вынікаў:
- Пры аб'яднанні табліц, у адной з іх адсутнічае першасны або унікальны ключ.
- Аб'яднованыя табліцы ўтрымліваюць незапоўненыя поля.
Для таго, каб пазбегнуць гэтых сітуацый, стварыце аб'яднання, заснаваныя на стаўленні паміж першаснымі ключамі ў адной табліцы і знешнімі ключамі ў іншы. Калі Вы ствараеце аб'яднанне, заснаванае на дадзеных, якія не зьяўляюцца ўнікальнымі, то канчатковы вынік можа можа ўтрымліваць ўсе дадзеныя з абедзвюх табліц. Напрыклад, наступная каманда SELECT - SQL стварае аб'яднанне, вынік якога можа быць вельмі аб'ёмным:
У гэтым прыкладзе, паштовы код будзе адназначна ідэнтыфікаваць месца размяшчэння кліента ў межах горада, але гэтага можа апынуцца недастаткова ў тым выпадку, калі вы збіраецеся супаставіць запісу кліента з запісамі замовы. Паштовы код ня адназначна ідэнтыфікуе кліента або заказ. Наўзамен гэтага стварыце аб'яднанне наступнай камандай:
У гэтым прыкладзе, поле customer_id адназначна ідэнтыфікуе пэўнага кліента і якія належаць яму заказы і, такім чынам, стварае выніковы набор, які аб'ядноўвае запісу кліента з кожнай запісам замовы.
Акрамя таго, праявіце абачлівасць пры аб'яднанні табліц з незапоўненымі палямі, паколькі Visual FoxPro не можа параўнаць поля з нявызначанымі (null) значэннямі. Пры стварэнні аб'яднання правярайце значэння палёў на іх абавязковую запоўненасць.
Напрыклад, калі вы мяркуеце, што поле customer_id ў табліцы Заказаў можа быць пустым, то ўжыеце наступную каманду SELECT - SQL, якая адфільтруе запісы з кліентамі без нумара:
Нататка: Ці можна, таксама, праверыць запоўненасць Знакавыя поля з дапамогай функцыі EMPTY () , Але яна працуе павольней, чым аперацыя параўнання з канстантай.
Пры выкарыстанні мэнэджэра праекта вы можаце аб'яднаць неабмежаваная колькасць праграм і працэдур у адным .app або .exe файле. Гэта можа істотна павялічыць хуткасць выканання праграмы па дзвюх прычынах.
Па-першае, Visual FoxPro адкрывае праграмны файл і пакідае яго адкрытым. Пазней, калі вы дасце каманду DO у праграме, якая змяшчаецца ў файле, Visual FoxPro не трэба будзе зноў адкрываць гэты файл.
Па-другое, прыкладанне, якое складаецца толькі з аднаго або двух файлаў, памяншае колькасць файлаў, якія захоўваюцца ў рабочай тэчцы. Хуткасць усіх файлавых аперацый узрастае, паколькі аперацыйная сістэма будзе правяраць меншая колькасць элементаў у папцы пры адкрыцці, перайменаванні, або выдаленні файлаў.
Больш падрабязна пра тое, як выкарыстоўваць менеджэр праектаў для стварэння прыкладанняў, чытайце ў раздзеле кампіляцыя прыкладання .
Для таго, каб ствараць самыя хуткія табліцы і індэксы, сьледам за ніжэйзгаданымі рэкамендацый.
- Калі не ўключана буферызацыя запісаў або табліц, то ўжывайце каманду INSERT - SQL замест пары каманд APPEND BLANK і REPLACE, што асабліва важна для індэксаваная табліц у шматкарыстальніцкай асяроддзі, паколькі пры гэтым індэксы будуць абнаўляцца толькі адзін раз.
- Калі неабходна дадаць шмат запісаў у індэксавацца табліцу, то хутчэй будзе спачатку выдаліць індэкс, затым дадаць запісу і пасля гэтага стварыць індэкс нанова.
- Па магчымасці, пазбягайце выкліку функцый у SQL-камандах, асабліва ў тых, якія вяртаюць больш аднаго запісу. Справа ў тым, што такія каманды павінны паўторна вылічвацца для кожнага запісу (пры гэтым функцыі кожны раз будуць выклікацца зноў). Калі Вы ствараеце каманду SQL з зменнымі дадзенымі, то ўжывайце фраз імя або макроподстановки замест функцыі EVALUATE (). Пакуль што, лепшай стратэгіяй з'яўляецца дынамічнае фарміраванне ўсёй каманды SQL, а не толькі яго асобных прапаноў (clause). Больш падрабязна аб гэтым глядзіце ў раздзелах выкарыстанне макрасаў і Стварэнне найменных выразаў .
- Як правіла, калі вы часта карыстаецеся адзін і той жа індэкс, то можаце палепшыць прадукцыйнасць прыкладання перыядычна сартуючы табліцу па індэксных выразе.
- У шматкарыстальніцкай асяроддзі ужывайце файлы .cdx замест файлаў .idx, таму што абнаўленне аднаго файла .cdx адбываецца хутчэй, чым некалькіх файлаў .idx.