Oder by primary – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Oder by primary – MySQL – Fórum – Programujte.comOder by primary – MySQL – Fórum – Programujte.com

 

Spuštěný nový filmový web Filmožrouti.cz — vše o Avengers, Pacific Rim, Thor, Star Wars…
marfd
~ Anonymní uživatel
5 příspěvků
1. 9. 2018   #1
-
0
-

Ahoj, mám

ID (primary), nazev, pocet

když řadím podle ORDER BY ID ASC LIMIT 10,

1) vybírají se všechny články a poté se řadí a vyberou jen 10

2) nebo se vybere jen posledních 10, tj. mysql nevybírá všechny články aby je mohl následně seřadit, ale uchovává si kde je konec / začátek.

+ ještě jeden dotaz, když mám 'název' v utf8, můžu tam dát klasický index, nebo musím fulltext?

Děkuji všem předem za odpověď   

Nahlásit jako SPAM
IP: 2a00:1028:9197:a4da:adc1:cf22:c709:6453...–
Kit+14
Guru
1. 9. 2018   #2
-
0
-

#1 marfd
Vybere se jen posledních 10, o efektivitu se bát nemusíš.

Pro UTF-8 můžeš použít i klasický index, jen je dobré si správně vybrat mezi CS vs. CI.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:8915:4e55:fcfd:a0fa...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
marfd
~ Anonymní uživatel
5 příspěvků
1. 9. 2018   #3
-
0
-

#2 Kit
mám utf8mb4_general_ci,

ale kdybych k tomu příkazu připsal i COUNT(*), tak to bude tedy méně efektivní?

Nahlásit jako SPAM
IP: 2a00:1028:9197:a4da:adc1:cf22:c709:6453...–
Kit+14
Guru
1. 9. 2018   #4
-
0
-

#3 marfd
COUNT(*) dokáže významně zpomalit dotazy, protože provádí kompletní průchod. Ovšem není mi jasné, jak ho do zmíněného dotazu chceš zakomponovat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:8915:4e55:fcfd:a0fa...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
marfd
~ Anonymní uživatel
5 příspěvků
1. 9. 2018   #5
-
0
-

#4 Kit
jde o tagy, rozhoduju se zda zobrazit posledních deset a nebo vybrat 10 nejlepších (radit podle 'pocet'), tady bych to count mít zrovna nemusel, to je pravda. Ale co když dělám výpis článků a potřebuju k tomu paginator, tak bud musím použít COUNT(*) (na zjištění celkového počtu článků) a nebo si založit tabulku kde si to číslo budu uchovávat. Jak bys to vyřešil ty?

Nahlásit jako SPAM
IP: 2a00:1028:9197:a4da:adc1:cf22:c709:6453...–
Kit+14
Guru
1. 9. 2018   #6
-
0
-

#5 marfd
Založil bych další tabulku s počitadlem, které bych aktualizoval triggerem pověšeným na tabulku s články. COUNT(*) by mohl větší tabulku pekelně zatížit, ale do cca 1000 záznamů se s tím moc trápit nemusíš.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:8915:4e55:fcfd:a0fa...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
marfd
~ Anonymní uživatel
5 příspěvků
1. 9. 2018   #7
-
0
-

#6 Kit
díky. Hm, trigger je dobrá věc, já to dělám přes transakce... teď mě napadlo že by lecos šlo udělat jedodušeji přez trigery.., ale co myslíš že je bezpečnější? Co kdyby z nějakého důvodu se ten trigger nemohl provézt?

Nahlásit jako SPAM
IP: 2a00:1028:9197:a4da:adc1:cf22:c709:6453...–
Kit+14
Guru
1. 9. 2018   #8
-
0
-

#7 marfd
Trigger sice neběží v transakci, ale můžeš ho do ní uzavřít. Je poměrně málo situací, kdy se trigger nemůže provést, ale u toho paginátoru by to ani moc vadit nemuselo. Kromě toho si tu hodnotu v tabulce s čítačem můžeš kdykoli vygenerovat znovu.

Zajímavým řešením by také mohlo být zapouzdření tvé manipulace s články do uložené procedury společně s aktualizací čítače. Bude to o něco rychlejší.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:8915:4e55:fcfd:a0fa...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3388 příspěvků
6. 9. 2018   #9
-
0
-

((SELECT ... ) ORDER BY id ASC) LIMIT 10,
Symbolicky by zavorky byly asi tak. Nejdriv podle podminek vybere z db, pak to seradi a pak vybere 10. LIMIT moznosti: LIMIT pocet nebo LIMIT od,pocet. Jsou ale i situace, kdy se ti zrovna tohle zpracovani nehodi.

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
MilanL+1
Věrný člen
7. 9. 2018   #10
-
0
-

 #2 Kit
já bych řekl, že vybere nejstarších 10, pokud je ID primary key a má u něj nastavené výchozí řazení asc, tak se ani neřadí, obdobná situace bude i při "order by desc" seřazeno je jen se vezme požadovaný počet záznamů v opačném pořadí od nejnovějšího. 

Nahlásit jako SPAM
IP: 91.139.9.–
Kit+14
Guru
7. 9. 2018   #11
-
0
-

#10 MilanL
To už je jen implementační detail, který může mít každá databáze vyřešen jinak. Obecně se to interně řeší tak jak píšeš, ale jedno WHERE na neklíčový sloupec může zcela odstavit indexování a řadit se musí. Pro zadavatele SQL dotazu se však vůbec nic nemění. Nejlépe udělá, pokud sestavení prováděcího plánu ponechá na databázi.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:e93f:3e49:f346:9c3c...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

LPC BYTE a něco něm — založil Alberto Mugabe

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý