20 најбољих препорука за МиСКЛ

Преглед садржаја

МиСКЛ база података постала је најпопуларнија релациона база података отвореног кода у свету због својих високих перформанси, доследности, високе поузданости и лакоће употребе. Међутим, на ове предности које нам нуди често утиче начин на који радимо на томе.

У овом водичу ћете научити низ савета који ће бити веома корисни и који ће нам омогућити да извучемо максимум из угла програмера и администратора базе података.

Који алат ћемо користити?МиСКЛ командна конзола '] МиСКЛ има програм, назван са истим именом као база података (мискл) који се користи за управљање базом података помоћу командне линије.

ВиндовсНалази се у директоријуму попут:

Ц: \ Програм Филес \ МиСКЛ \ МиСКЛ Сервер 5.6 \ бин

Директоријум се може разликовати, на пример, може се налазити у корену Ц: диска или на било ком другом месту на којем смо можда инсталирали МиСКЛ. Да бисмо приступили МиСКЛ конзоли у оперативном систему Виндовс, морамо се налазити унутар тог директоријума.

ЛинукПогледајте следећу везу:

Приступите МиСКЛ -у са Линука

МацРачунари са системом Мац ОС Кс имају терминал командне линије уграђен међу доступним апликацијама. За приступ се користи иста команда као у Линуку.

пхпМиАдминТо је бесплатни софтверски алат написан на ПХП -у, који се користи за администрацију МиСКЛ -а путем Интернета. Ако имате инсталирано локално развојно окружење, на пример КСАМПП или ВАМП, овај алат ће већ бити инсталиран. Ако имате план хостинга са административним панелом, већина њих нуди овај алат као администратор МиСКЛ базе података.

[цолор = ргб (169,169,169)] пхпМиАдмин из КСАМПП [/ цолор]

ЕНЛАРГЕ

[цолор = # а9а9а9] пхпМиАдмин из ЦПанела [/ цолор]

Имајући ова 2 алата при руци, можемо почети тестирати све ове добре праксе које ћемо приказати у наставку.

Су 20 најбољих МиСКЛ најбољих пракси:

1. Именовање конвенција


За сваки програмски језик постоје стандарди кодирања, али у МиСКЛ терминима нисмо пронашли универзалне праксе кодирања које сви следе. Међутим, прегледом неколико оквира отвореног кода заснованих на ПХП -у филтрирамо нека општа правила примене која ће нам помоћи да брже пишемо СКЛ упите, елиминишемо забуне и сукобе, како у упиту тако и у програмском језику који користимо.

Општа правилаИмајте на уму следећа правила како бисте избегли проблеме.

  • Користите мала слова јер вам помаже у брзини куцања, избећи ћете грешке у случају функција осетљивих на мала и велика слова итд.
  • Не користите размаке, уместо тога користите доњу црту (_).
  • Немојте користити бројеве у именима, само слова на енглеском.
  • Користите ваљана разумљива имена.
  • Имена би требало да буду јасна.
  • Имена не смеју садржати више од 64 знака.
  • Избегавајте коришћење префикса.

Правила за називе база податакаПратите сва горе наведена општа правила.

  • Назив може бити и у једнини и у множини, али база података представља базу података па би требало да буде сингуларна што је више могуће.
  • Избегавајте префиксе где је то могуће.

Правила за називе табелаЗа имена табела користите мала слова: МиСКЛ се обично налази на Линук серверима, осетљива су на велика и мала слова па је најбоља пракса да имена табела буду мала слова.

  • Називи табела морају бити у једнини: табела је један ентитет као и модел, па је чудно име таблице у множини.
  • Префикси у називу табеле: Много смо пута видели да табеле имају префикс имена базе података или имена пројекта. Понекад је то потребно када у нашем пројекту имамо много база података како бисмо превазишли ограничења неких хостинг провајдера. Али ако није потребно, а наш пројекат је мали, избегавајте коришћење префикса.

Назив пољаКористите сва горенаведена правила, односно користите мала слова, не користите празна места, не користите бројеве и избегавајте префиксе.

  • Користите једну или две кратке речи где је то могуће.
  • Имена поља морају бити разумљива, на пример: цена, назив предузећа итд.
  • Назив примарне колоне: Примарни кључ може имати назив ид или назив табеле _ид. То ће зависити од избора.
  • Избегавајте коришћење резервисаних речи у пољима: *****, датум итд. У овим случајевима пожељно је користити префиксе као што је запис_дате итд.
  • Избегавајте коришћење назива колона са истим именом табеле. Ово може изазвати забуну при писању упита.
  • Избегавајте називе у скраћеним или спојеним акронимима.

2. Увек користите исправан тип података


Користите типове података на основу природе података. Коришћење нерелевантних типова података може заузети више простора или довести до грешака.

ПримерКоришћење варцхар (20) за складиштење вредности датума и времена уместо ДАТЕТИМЕ може изазвати грешке током прорачуна времена повезаног са датумом, а могуће је и у случају неважећег складиштења података.

3. Користите ЦХАР (1) преко ВАРЦХАР (1)


Ако сте сачували један низ знакова, користи ЦХАР (1) уместо ВАРЦХАР (1) јер ће ВАРЦХАР (1) узети додатни бајт за складиштење информација. Са чим то треба узети у обзир при управљању овим ликовима.

4. ЦХАР за фиксне податке


Користите ЦХАР податке за складиштење само података фиксне дужине

Пример:

Употреба ЦХАР (1000) уместо ВАРЦХАР (1000) заузима више простора ако је дужина података мања од 1000.

5. Избегавајте коришћење регионалних формата датума


Када користите типове података:
  • ДАТУМ ВРЕМЕ
  • ДАТЕ

Увек користите формат ГГГГ-ММ-ДД или ИСО формат датума који одговара вашем СКЛ машини. Остали регионални формати попут ДД-ММ-ГГГ, ДД-ММ-ГГГГ неће бити правилно ускладиштени.

6. Оптимизујте своје захтеве за кеш меморију


већина МиСКЛ сервери имају омогућен систем кеширања. То је једна од најефикаснијих метода за побољшање перформанси, која долази из руке машине за базе података. Када се исти захтев извршава више пута, резултат се преузима из кеша, што је много брже.
Следећи пример је у ПХП -у:
 // Кеш НЕ ради $ р = мискл_куери ("СЕЛЕЦТ наме ФРОМ усерс ВХЕРЕ рецорд> = ЦУРДАТЕ ()"); 
 // Цацхе ДОЕС ворк $ тодаи = дате ("И-м-д"); $ р = мискл_куери ("ИЗАБЕРИ име од корисника ВХЕРЕ запис> = '$ данас'"); 
Разлог зашто не ради у првом случају је употреба ЦУРДАТЕ (). Може се применити на све недетерминистичке функције, као што су НОВ () и РАНД (). Пошто се резултат који функција враћа може променити, МиСКЛ одлучује да онемогући кеш меморију тог упита.

7. Избегавајте коришћење „СЕЛЕЦТ *“ у вашим упитима


Као опште правило, што се више података чита из табела, спорије се поставља упит. С обзиром на то да неке производне табеле могу да садрже десетине колона, од којих су неке састављене од великих типова података, не би било паметно изабрати све њих.

То је добра навика наведите потребне колоне у вашем СЕЛЕЦТ изразу.

8. Користите ЛИМИТ 1 Када желите само један ред


Понекад када постављате упите за своје табеле и знате да вам је потребан само један ред. У тим случајевима морате затражити појединачни резултат из базе података или ће он провјерити свако подударање у одредби ВХЕРЕ.

У овим случајевима, додавањем ЛИМИТ 1 у ваш упит можете значајно побољшати брзину. На овај начин, база података ће престати да скенира резултате оног тренутка када их пронађе, уместо да прегледа целу табелу или индекс.

 // Имам кориснике из Мадрида? // шта НЕ треба радити: $ р = мискл_куери ("СЕЛЕЦТ * ФРОМ усер ВХЕРЕ цити = 'Мадрид'"); иф (мискл_нум_ровс ($ р)> 0) {//…} // много боље: $ р = мискл_куери ("СЕЛЕЦТ 1 ФРОМ усер ВХЕРЕ цити = 'Мадрид' ЛИМИТ 1"); иф (мискл_нум_ровс ($ р)> 0) {//…}
[цолор = # а9а9а9]ЛИМИТ препорука[/Боја]

9. Употреба ***** БИ


Употреба ***** ОД СТРАНЕ може успорити време одзива у вишекорисничким окружењима. Зато препоручујемо да се ***** БИ клаузула користи само када је то потребно.

Не злоупотребљавајте његову употребу.

10. Одаберите одговарајући основни мотор


Ако развијете апликацију која чешће чита податке него писање.
(на пример: претраживач), изаберите механизам за складиштење МиИСАМ.

Ако развијете апликацију која чешће записује податке од читања
(на пример: банкарство у реалном времену), изаберите механизам за складиштење ИнноДБ.

Избор погрешног механизма за складиштење ће утицати на перформансе ваших упита.

11. Користите клаузулу ЕКСИСТС кад год је потребно


Ако желите да проверите податке, немојте користити:
 Ако је (СЕЛЕЦТ цоунт (*) из табеле ВХЕРЕ цол = 'нека вредност')> 0
Уместо тога користите клаузулу ЕКСИСТС:
 Ако ПОСТОЈИ (СЕЛЕЦТ * из табеле ВХЕРЕ цол = 'нека вредност')
Што је брже у времену одзива.

12. Користите ЕКСПЛАИН у вашим СЕЛЕЦТ упитима


Коришћење кључне речи ЕКСПЛАИН даће вам много унутрашњих детаља о томе шта МиСКЛ ради да изврши ваш упит. Ово вам може помоћи да уочите уска грла и друге проблеме са упитом или структуром табеле.

Резултат ЕКСПЛАИН упита ће вам показати индексе који се користе, како се истражује табела, како се наручује итд.

Одаберите упит СЕЛЕЦТ (по могућности сложен, са спојевима) и додајте ријеч ЕКСПЛАИН на почетку свега. Вратиће резултате у једноставну табелу. На пример, претпоставимо да сам заборавио да индексирам колону, приказаће нам се следећи екран:

ЕНЛАРГЕ

Након додавања индекса у табелу стања, то би изгледало овако:

ЕНЛАРГЕ

13. Индексирајте и користите исту врсту колоне за Јоинс


Ако ваша апликација садржи много наредби ЈОИН, морате бити сигурни да су колоне којима се придружите индексиране у обје табеле. Ово утиче на то како МиСКЛ интерно оптимизује ЈОИН операције.

Такође, колоне којима се придружите морају бити истог типа. На пример, ако се придружите колони типа ДЕЦИМАЛ са колоном типа ИНТ из друге табеле, МиСКЛ неће моћи да користи бар један од два индекса. Чак и кодирање знакова мора бити истог типа за колоне Врста низа.

 // у потрази за компанијама у мом граду $ р = мискл_куери ("ОДАБЕРИТЕ назив_компаније ОД корисника ЛЕФТ ЈОИН ЈОИН цомпанииас ОН (усерс.цити = цомпанииас.цити) ВХЕРЕ усерс.ид = $ усер_ид");
Обе колоне града морају бити индексиране и обе треба да буду истог типа и кодирања знакова или ће МиСКЛ морати да изврши потпуно скенирање табела.

14. Користите НОТ НУЛЛ ако можете


Осим ако немате посебан разлог да користите вредност НУЛЛ, увек би требало да поставите колоне на НОТ НУЛЛ.

Пре свега, запитајте се да ли би било разлике између празног низа и НУЛЛ вредности (или за поља ИНТ: 0 у односу на НУЛЛ). Ако нема проблема између две вредности, не треба вам поље НУЛЛ. НУЛЛ колоне захтевају додатни простор и могу додати сложеност вашим упоредним изјавама. Избегавајте их кад год можете.

У сваком случају, разумемо да у неким врло специфичним случајевима постоји разлог за коришћење НУЛЛ колона, што није увек лоше.

15. Табеле фиксне величине (статичке) су брже


Када је свака колона у табели фиксне дужине, цела табела се сматра „статичком“ или „фиксном дужином“.

Неки примери типова колона који НИСУ фиксне величине су:

  • ВАРЦХАР
  • ТЕКСТ
  • БЛОБ

Ако укључите само један од ових типова колона, табела више неће бити фиксне величине и мораће се другачије третирати МиСКЛ енгине.

Табеле фиксне величине могу повећати продуктивност јер МиСКЛ енгине брже претражује ваше записе. Када желите да прочитате одређени ред у табели, можете брзо израчунати његову позицију. Ако величина реда није фиксна, сваки пут када морате да претражујете, прво морате поставити упит индексу примарног кључа.

Такође их је лакше претраживати и обнављати након несреће. Али с друге стране, они би такође могли заузети више простора.

16. Вертикално партиционисање


Вертикално партиционирање је чин вертикалног одвајања ваше структуре таблице из разлога оптимизације.

Пример 1:

Сигурно ћете имати корисничку табелу која садржи поштанску адресу, која се не користи често. Овде можете поделити табелу и сачувати адресе у посебну табелу. На овај начин би ваш главни кориснички сто имао мању величину. Као што знате, што су мањи столови су бржи.

Пример 2:

У табели имате поље "ласт_аццесс". Ажурира се сваки пут када корисник приступи вашој страници. Али сваки приступ доводи до ослобађања кеша упита за табелу. Оно што можете да урадите је да ово поље ставите у другу табелу тако да су измене у вашој корисничкој табели сведене на минимум.

Али такође морате бити сигурни да не морате стално да се придружите две табеле након партиционисања или ћете доживети пад перформанси, управо супротно од онога што смо тражили.

17. Похрањује ИП адресе као УНСИГНЕД ИНТ


Многи програмери би створили ВАРЦХАР поље (15) не схватајући да могу да чувају ИП адресе као целе бројеве. Када користите ИНТ, користите само 4 бајта у меморији, а такође има фиксну величину у табели.

Али морате бити сигурни да је колона је УНСИГНЕД ИНТ (неозначени цео број) јер ИП адресе користе читав 32-битни опсег без потписа.

У вашим упитима можете користити ИНЕТ_АТОН () функција да претвори ИП адресу у цео број, а ИНЕТ_НТОА () да уради супротно. Постоје и сличне функције у ПХП -у које се зову ип2лонг () И лонг2ип ().

18. Креирајте приказе да бисте поједноставили уобичајену употребу у табелама


Погледи помажу поједностављивању и сложених шема и безбедносне имплементације. Један од начина на који доприносе безбедносном делу је тај што вам омогућава да сакријете имена поља од програмера.

Такође се може користити за филтрирање неиндексираних колона, остављајући само поља која се брже приказују у претрази.

19. Не користи ***** БИ РАНД ()


Ово је један од оних трикова који на први поглед звуче сјајно и гдје многи програмери почетници падају. Можда нисте схватили невероватно уско грло које може настати коришћењем ове технике у вашим захтевима.

Ако вам за резултат заиста требају случајне табеле, постоје много бољи начини за то. Јасно је да ће заузети више кода, али ћете спречити могуће уско грло које се експоненцијално повећава како ваш садржај расте.

Проблем је у томе што ће МиСКЛ морати да се покрене РАНД () (што захтева процесорску снагу) за сваки од редова пре него што их сортирате и вратите један ред.

 // начин на који то не треба урадити: $ р = мискл_куери ("СЕЛЕЦТ усернаме ФРОМ усер ***** БИ РАНД () ЛИМИТ 1"); // много боље: $ р = мискл_куери ("СЕЛЕЦТ цоунт (*) ФРОМ усер"); $ д = мискл_фетцх_ров ($ р); $ ранд = мт_ранд (0, $ д [0] - 1); $ р = мискл_куери ("СЕЛЕЦТ усернаме ФРОМ усернаме ЛИМИТ $ ранд, 1");
Зато бирате насумичан број мањи од броја резултата и користите то као помак у одредби ЛИМИТ.

20. Оптимизирајте ВХЕРЕ клаузулу


Ово су неки савете за оптимизацију клаузуле ВХЕРЕ:
  • Уклоните непотребне заграде. На пример:
 Од до5 И б = ц И а = 5
  • ЦОУНТ (*) оптимизован је за враћање СЕЛЕЦТ -а много брже, све док је на столу и без коришћења ВХЕРЕ. На пример:
 СЕЛЕЦТ ЦОУНТ (*) ФРОМ табле.
  • Тхе Опција СКЛ_СМАЛЛ_РЕСУЛТ, може се користити са ГРУПА ОД или ДИСТИНЦТ да означи да је скуп резултата мали. У овом случају, МиСКЛ користи веома брзе привремене табеле за складиштење добијене табеле уместо за сортирање.

МиСКЛ водичи

wave wave wave wave wave