Kurs SQL i optymalizacji Oracle

Kurs SQL i optymalizacji Oracle
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
1

Cześć
Jakiś czas temu nosiłem się z zamiarem napisania czegoś w rodzaju kursu/blogu o programowaniu w SQL, PL/SQL i bazie Oracle. Bardziej zaawansowanego niż większość kursów gdzie nauka zaczyna się na SELECT i kończy na JOIN.
Do tej pory napisałem dwa wpisy/kursy i pisze kolejne o indexach w Oracle, mam jeszcze kilka pomysłów o czym pisać(dalej indexy, partycjonowanie, uprawnienia role, jak czytać plany zapytan, jakieś dobre praktyki, listenery).

Poniżej dwa pierwsze kursy jakie napisalem:
Jak zbudowany jest Index w Oracle: https://oracledev.pl/kurs-index-w-oracle/
Jak używać Unique Index: https://oracledev.pl/sql-index-unique-scan/

Dajcie proszę znać o czym warto jeszcze napisać oraz co ewentualnie poprawić w już napisanych kursach żeby lepiej się czytało i wynosiło więcej wartości.


woolfik
Jak zbudowany jest indeks BTREE ale pamiętaj, że oracle ma też indeksy typu BITMAP :) różnią się znacznie i warto o tym wspomnieć ;)
kate87
Ooooł tak. Budowa indeksów i ich rozróżnienie (nie pamiętam czy widziałam na blogu) do tego więcej o rzeczach administracyjnych. To co wpływa na wskaźnik wysokiej wody, undo/redo itd. konfiguracje i jak najwięcej optymalizacji hinty/partycje itd.
oracledev
@woolfik: @kate87 będzie i o indexach bitmapowych i o partycjonowaniu i o wielu innych tylko po kolei :) chce skończyć cykl indeksów btree dalej mam plan na metody klonowania, partycje, btree i międzyczasie inne :)
PA
PA
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:288
1

https://oracledev.pl/kurs-index-w-oracle/

Same bloki liści poza tym, że są powiązane z blokami gałęzi są również powiązane między sobą. I tak np. blok 0-3 jest powiązany z blokiem 0-6 a ten z kolei z blokiem 0-7 itd.

Tu nie ma przypadkiem bloków 0-3, 3-6, 7-10? I ta pogrubiona 3 nie powinna być przypadkiem 4? :P

I tam na zdjęciu w załączniku przy pkt. 2, który zaznaczyłem jest właśnie zakres 0-3, a tam przy pkt. 1 masz 0, 0, 1, 2. Nie brakuje tej 3? I czemu 0 jest zdublowane?
Pytam bo może to jest dobrze, ale ja Oracla aż tak nie ogarniam

  • scr.PNG (57 KB) - ściągnięć: 186
edytowany 1x, ostatnio: pavarotti
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Tu nie ma przypadkiem bloków 0-3, 3-6, 7-10? I ta pogrubiona 3 nie powinna być przypadkiem 4? :P

Masz w pełni rację, poprawiłem :)

I tam na zdjęciu w załączniku przy pkt. 2, który zaznaczyłem jest właśnie zakres 0-3, a tam przy pkt. 1 masz 0, 0, 1, 2. Nie brakuje tej 3? I czemu 0 jest zdublowane?

0 jest zdublowane bo indeks nie musi (może i akurat taki indeks opisałem w drugim wpisie: https://oracledev.pl/sql-index-unique-scan/) mieć tylko wartości unikalne.
Co do braku 3 to wprost nie ma nigdzie w dokumentacji, że blok gałęzi zawiera tylko zakres wartości w bloku liścia. Natomiast patrząc po tabeli zorganizowanej jako index (link) dokumentacja pokazuje, że mogą być "dziury" tzn. możemy mieć wskazanie 0-30 w bloku gałęzi ale w bloku liścia mogą zawierać się kluczę z wartością 20 i 30 a pozostałych jest brak. W związku z tym, przez analogię myślę, że jest to poprawne :)
@pavarotti Dzięki wielkie za info zwrotne i uważność :)


edytowany 5x, ostatnio: oracledev
UglyMan
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Postów:2206
2

Trochę uproszczony jest temat indeksów. O użyciu indeksu bądź nie decyduje optymalizator, od kilku wersji jest tylko optymalizator kosztowy i może się okazać, że mimo utworzenia indeksu i spełnienia innych warunków indeks nie zostanie wykorzystany. Na prostym zapytaniu wszystko jest jasne. na bardziej złożonych można się nieźle przejechać. no i należy pamiętać, że dodanie indeksu wydłuża operacje typy INSERT.

_13th_Dragon
Oczywiście wydłuży, kilka milisekund? Ale za to zapytanie zamiast 10 min trwa kilka milisekund!
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 2 godziny
  • Postów:2367
1

Kursów wszelkiej maści n/t Oracle jest dużo, nie wiem czy to dobra nisza ;-) Może na rodzimym podwórku plusem będzie to, że po blog po polsku.

Jeśli chodzi o optymalizację, to przydałoby się wyjaśnienie:

  1. Jak wyglądają fazy przetwarzania zapytania (od wysłania przez klienta, po odebranie wyników). Tu jednak trzeba wyjaśnić architekturę bazy, bo sekwencja kroków będzie niezrozumiała.
  2. wprowadzenie czego dotyczy optymalizacja, bo mogą być różne "funkcje celu" (IO/CPU/RAM) i jak działa optymalizator zapytań.

A do tego potrzebne będzie zrozumienie ścieżek dostępu do danych ("access paths"), typów złączeń ("hash join", "nested loop", "sort-merge", "cluster"), czym są "anti-joins", "semi-joins" i "joins",
czym są statystyki systemowe, czym histogramy, latche, mutexy, etc. Cała masa teorii, która trzeba łyknąć zanim się weźmie za optymalizację.

Kiedyś miałem podobny pomysł na bloga, ale zrezygnowałem ze względu na istnienie takich materiałów jak:

Od jednego z kolegów nauczyłem się bardzo prostej techniki. Zadawać pytanie "Dlaczego sądzisz, że to rozwiąże problem?" do każdego pomysłu na rozwiązanie problemu.
Dzięki temu oduczyłem się wprowadzać losowe zmiany, np. dodawanie indeksów, modyfikacja parametrów bazy i sprawdzenie czy pomogło ;-) Wstyd, ale kiedyś tak "optymalizowałem".

Jak chcesz pisać o optymalizacji, to przede wszystkim opisz systematyczne podejście (metodykę).

Zobacz pozostałe 2 komentarze
YA
@Kenshin206: MSSQL nie znam na dobrym poziomie i nie wiem jakie książki warto przeczytać, czy jakie blogi śledzić. Na pewno ktoś z forumowiczów jest w stanie coś polecić :) Sam korzystałem z takiej cegły ~1500 stron, ale tytułu nie pamiętam i nie mam pod ręką półki z książkami.
K2
SQL - stopien podtawowy mam opanowany , teraz chcialbym stopien srednio-zaawansowany opanowac, Piszac podstawowy mam na myli joiny CTE procedury Trigery funkcje.
hyde
Itzik Ben-Gan, Brent Ozar, Adam Machanic i sporo innych. Poczytaj, a mózg Ci się zgotuje 😀
K2
dzieki zamowione.
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

@yarel: Niestety, od jakiegoś czasu mam wrażenie, że w ogóle znajomość baz danych staje się niszą.
Dzięki za fajne tematy, na pewno napiszę o joinach, architekturze Oracle, jednak wszystko po kolei :)
Co do samej metodyki to trzeba wiedzieć jakie działania co robią i jakie niosą konsekwencje. Też kiedyś waliłem indeksy na oślep, tworzyłem dziwne struktury czy zmieniałem parametry bazy żeby zobaczyć czy zaskoczy, ale zmieniło się to gdy zacząłem rozumieć jak działa baza i to chciałbym pokazać w tym blogu/kursie :)


UglyMan
U większość programistów krąży przeświadczenie, że baza to nie ich problem i potem lecą takie krzaczki w zapytaniach, że głowa mała. Z inne strony mam wrzenie, że rodzaj bazy nie wybiera się na postawie zapotrzebowania tylko mody. Bo wszyscy robią w NoSQL, to ja też siebie zrobię Mongo a potem wychodzą potworki, że głowa mała.
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
1

Dla zainteresowanych dodałem nowy wpis o RANGE INDEX SCAN: https://oracledev.pl/sql-index-range-scan/
Kolejny wpis będzie odejściem od indexów ale nadal w temacie optymalizacji :)


kate87
  • Rejestracja:około 15 lat
  • Ostatnio:około 3 lata
1

Czyli hinty.

YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 2 godziny
  • Postów:2367
0

Zanim odejdziesz od indeksów, to może warto jeszcze parę słów o innych zagadnieniach związanych z indeksami ;-)

  • reverse range scan
  • skip scan
  • fast index scan
  • full index scan
  • index join / merge
  • parallel index scan
  • function based indexes
  • domain indexes
  • partitioned indexes
  • compressed indexes
  • reverse key indexes
  • virtual indexes
  • invisible indexes
  • local index vs global index
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

@kate87 @yarel
Nie hinty a znaczenie kolejności w klauzuli WHERE :)
Natomiast temat indeksów będę kontynuował:)


oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Tak jak obiecałem dodałem nowy wpis o kolejności wykonywania predykatów w klauzuli WHERE w SQL Oracle.
Link do kursu: https://oracledev.pl/kolejnosc-warunkow-w-where/
W kolejnych wpisach wrócę do opisywania Indexów :)


R7
  • Rejestracja:około 6 lat
  • Ostatnio:7 miesięcy
  • Postów:216
0

Tak mi się rzuciło w oczy:
"Konsekwencją zakładania indeksów na kolumny które mogą przechowywać nulle jest nieraz niemożność wykorzystania indeksu w przeszukiwaniu."

Nie zgodzę się z tym. Może być to co najwyżej brak możliwości użycia tego indeksu do wyszukiwania rekordów z NULL w danym polu. Natomiast nie przeszkadza to użyć tego indeksu dla rekordów, które mają to pole niepuste.

A do wyszukania rekordów z NULL w polu (pod warunkiem, że jest ich mniejszość w tabeli) jest taki sprytny trick.
Tworzy się indeks złożony na parze (POLE_Z_NULLAMI, POLE_KLUCZA_GŁÓWNEGO).

Wtedy zapytanie typu
WHERE POLE_Z_NULLAMI is null
działa całkiem sprawnie, no chyba że nulli jest tam większość.

oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Co do NULLi w indexie pokazujesz, że aby go wykorzystać trzeba stosować "tricki" a nie chcę w tym wpisie opisywać tricków. Co do samego przeszukania indexu który założony jest na kolumnie z nullem oczywiście jest możliwe jego wykorzystanie dlatego też dodałem w opisie "nieraz" i w sytuacji kiedy będziesz wyszukiwał wartości z null (po prostu) z indexu baza nie skorzysta. We wpisie celowo nie piszę o takich sytuacjach żeby nie mieszać za bardzo. We wcześniejszym zdaniu piszę skąd to się bierze > Index typu B-tree nigdy nie przechowuje wartości całkowicie nullowych
O nullach w indexen będę dedykował osobny wpis.
@robertos7778 Dzięki wielkie za uwagę :)


edytowany 1x, ostatnio: oracledev
R7
Miałem na myśli to, że to zdanie było zbyt skrótowe. Ktoś może odnieść wrażenie, że indeks warto zakładać tylko dla kolumn NOT NULL, co nie jest oczywiście prawdą. A co do NULLi to warto wyjaśnić, że ciężko jest zindeksować coś czego nie ma. :)
oracledev
@robertos7778: Masz racje co do zbyt skrótowego opisu. Poprawię wpis i dodam nieco więcej opisu odnośnie nulli. Jeszcze raz dzięki za uważne czytanie i komentarz :)
Mondonno
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Polska
  • Postów:88
0

Napisz coś o zapytaniach czyli select, delete, update, display, where, count itp. itd.

Wielu ludziom by się przydało...


oracledev
@Mondonno: Chodzi Ci o opis podstawy SQL?
Mondonno
Tak, niektórzy początkują
Mondonno
Dużo ludzi początkuje z bazami danych mysql..
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Właśnie napisałem kolejny kurs o Full Index Scan: KURS ORACLE SQL FULL INDEX SCAN
Średnio dodaję wpisy raz w tygodniu i myślałem aby raz dodawać kurs "z cyklu" a raz offtop czyli np. jeden tydzień kurs z Indexów a jeden z czegoś innego. Co sądzicie o takiej formule?

Kolejny kurs jaki dodam będzie offtop, o dodawaniu DEFAULT na kolumnach NULL i NOT NULL.

Dajcie mi w ogóle znać, jak się czyta moje kursy i co mogę poprawić.


oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Tak jak wspomniałem ostatnio, dodałem nowy Kurs Oracle SQL: Oracle - Default na kolumnach null i not null
Tym razem opisałem nieco więcej o podstawach ale poruszyłem też kwestie jak default wpływa na wydajność. Dajcie znać, czy taka forma jest lepsza? Czy nie ma za dużo podstaw? A może pisać więcej o podstawach?


R7
Dwie drobne uwagi - pisz na jakiej wersji bazy działasz i nie podawaj przykładów operując na użytkowniku SYSTEM. To zła praktyka, poza tym można się przyzwyczaić, że do czegoś jest dostęp (widoki DBA_, V$_), a potem na zwykłym użytkowniku tego nie będzie.
oracledev
@robertos7778: To prawda, ale nie chciałem tworzyć specjalnego schematu z uprawnieniami i rolami. Kolejny wpis będzie o Fast Full Scana kolejny o uprawnieniach, rolach itd. Od tego momentu chcę pokazywać w kursach jakich uprawnień potrzeba do wykonywania SQL z przykładów. Dzięki wielkie za uwagę :)
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Napisałem ostatnio dwa kolejne kursy:
Dla bardziej początkujących: Oracle SQL: Granty i Role
W temacie Indexów: Index Fast Full Scan
Oraz stworzyłem listę kursów nad którymi będę pracował w najbliższym czasie: Kurs Oracle SQL
Mam w związku z tym pytania:

  1. Kursu Uprawnień i Ról jest pierwszym kursem który napisałem dla użytkowników "prawie" początkujących. Czy temat nie jest wyczerpany zbyt pobieżnie lub czy nie wchodzę w niego zbyt głęboko jak dla początkujących?
  2. Chcę, zacząć pisać kurs o podstawach baz danych czyli np. postaci normalne, diagramy etc. jest to interesujące?

oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Cześć,
Dzisiaj napisałem kolejny kurs o optymalizacji zapytań z serii o indexach: Index Skip Scan
Zastanawiam się nad rozpoczęciem serii kursów dla początkujących np. o postaciach normalnych, diagramach baz oraz podstawach SQL. Warto pisać o czymś takim?


J6
  • Rejestracja:około 8 lat
  • Ostatnio:około 2 lata
  • Postów:18
1
oracledev napisał(a):

nad rozpoczęciem serii kursów dla początkujących np. o postaciach normalnych, diagramach baz oraz podstawach SQL. Warto pisać o czymś takim?

Na pewno warto, zawsze są jacyś rozpoczynający przygody z bazami danych i głodni wiedzy, niemniej obyś nie zapomniał też o dotychczasowej linii ;)

oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
1

Cześć,
Nie było mnie jakiś czas ale wróciłem do pisania kursu. Powinienem znów pisać regularnie czyli średnio jeden kurs na tydzień :)
Dzisiaj przedstawiam kurs: Wstęp do Oracle FLASHBACK
Staram się znaleźć odpowiedni balans między ilością przykładów, dogłębnością opisów a długością kursu. Czy poziom szczegółowości tematu jest OK?
Czy warto by dodawać przykładowe zadania, dla tych co chcą poćwiczyć?


oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Cześć,
Dziś umieściłem nowy kurs Oracle SQL o INDEX JOIN SCAN
Dajcie znać, czy dalej lepiej pisać o utrzymaniu indexów czy o indexach bitmapowych?


R7
  • Rejestracja:około 6 lat
  • Ostatnio:7 miesięcy
  • Postów:216
1

Myślę, że warto rozprawić się z mitem "indeksy trzeba co jakiś czas przebudowywać". Tylko to wymaga sporo roboty przy przygotowaniu danych testowych, ich modyfikacji i testach pokazujących jak wygląda struktura drzewa indeksu i jak zmiany w danych na nie wpływają.

oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Dziś dodałem nowy kurs teoretyczny i jednocześnie rozpocząłem pisanie serii o JOIN W ORACLE
Tradycyjnie pierwszy kurs jest raczej wstępem, przypomnieniem i nakreśleniem działania mechanizmu w samej bazie. 0 kodu ale w kolejnych kursach serii opiszę metody joinowania. O czym warto pisać przy okazji JOINów poza metodami ich łączenia?
Serii o indexach jeszcze nie skończyłem i będzie kontynuowana :)


oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Cześć,
Właśnie napisałem kurs SQL o TABLE ACCESS BY INDEX ROWID
Kolejny kurs opiszę o tym czym jest ROWID, kolejny o pierwszej motodzie joinowania.
A o czym pisać dalej?


PA
PA
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 3 lata
  • Postów:288
1

W pierwszej kolejności opiszę działania dostępu do tabeli poprzez ROWID oraz czym jest ROWID a następnie pokażę jak mechanizm ten wykorzystuje baza przy **korzsytaniu **z indexu.

Literówka w pierwszym akapicie

edytowany 1x, ostatnio: pavarotti
J6
  • Rejestracja:około 8 lat
  • Ostatnio:około 2 lata
  • Postów:18
0
oracledev napisał(a):

A o czym pisać dalej?

Chętnie poczytałbym o obiecankach z komentarzy pod artykułem dotyczącym kolejności warunków w WHERE :)

edytowany 1x, ostatnio: jury68000
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Cześć,
Dziś opublikowałem nowy kurs o ROWID
W kolejnym wpisie opiszę pierwsza metodę joinowania :)


R7
Wszystko OK, ale "obszar tabel"? Chyba chodziło o przestrzeń tabel (tablespace)?
oracledev
@robertos7778: racja, już poprawiłem! Dzięki za uważne czytanie :)
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Cześć,
W dzisiejszym kursie kontynuuję tematykę JOINowania.
Tym razem Kurs SQL o działaniu i wykorzystaniu: JOIN NESTED LOOPS


edytowany 1x, ostatnio: oracledev
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Cześć!
Udostępniłem nowy kurs o optymalizacji bazy danych Oracle i SQL.
Nowy kurs pod tytułem: Kolejność kolumn w tabeli
Opisuję w nim czy i jakie znaczenie ma kolejność kolumn. Opisuję jak zapisywane są dane w bloku danych Oracle oraz jakie ma to znaczenie na konkretnym przykładzie :)


Rozpocząłem pisanie nowego kursu dla początkujących w SQL i bazach danych dostępny jest on pod adresem: Kurs SQL
Jeżeli ktoś chce być na bieŻąco (Boże, widzisz takie błędy i nie grzmisz) z kursem dla początkujących to przy publikacji nowego kursu będę wrzucał post na forum ale w dziale Edukacja pod w wątku: Kurs SQL i baz danych dla początkujących, baza Oracle

W tym wątku będę wrzucam tylko aktualizacje odnośnie kursów dla średniozaawansowanych, dotyczące czysto bazy Oracle i optymalizacji bazy danych czy zapytań SQL.
Natomiast jeżeli ktoś chce śledzić kursy z obu serii to zapraszam do Facebookowego profilu: OracleDevPL


edytowany 2x, ostatnio: oracledev
oracledev
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Warszawa
  • Postów:56
0

Cześć,
Udostępniam nowy kurs dla średnio zaawansowanym SQL, działaniu bazy Oracle i optymalizacji zapytań.
Nowy kurs Oracle SQL o : HASH JOIN w Oracle


Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)