Periere dies cum non curandum est de optimizing database effectu. Tempus non stat. Omnis novus manceps technicus proximos Facebook creare vult, dum conetur colligere omnia quae manus suas possunt accipere. Negotiae hac notitia indigent ad exempla meliora instituendi qui pecuniam eis adiuvant. His in condicionibus programmata APIs creandi opus est ut celeriter et fideliter laborare sinant cum ingentes notitiarum copiae.
Si applicationem vel datorum backends per aliquod temporis spatium cogitas, probabiliter codicem scriptum habes ut paginas queries detegas. Exempli gratia;
SELECT * FROM table_name LIMIT 10 OFFSET 40
Via eft?
Sed si ita est quomodo paginationem tuam fecisti, me paenitet dicere id non efficacissime facere.
Visne mihi objicere?
Nomen saltem unus elit backend qui numquam usus est OFFSET
ΠΈ LIMIT
paginated queries praestare. In MVP (Minimum Productum Viable) et in inceptis ubi parvae copiae notitiarum adhibentur, aditus satis applicabilis est. Hoc modo operatur, ut ita dicam.
Si autem certas et efficaces rationes a scabere creare debes, in antecessum de efficacia investigandi databases in talibus systematibus adhibendis cavere debes.
Hodie loquemur de quaestionibus cum communibus (nimis malis) exsequendis machinarum interrogationum paginatarum, et quomodo consequi altam actionem cum huiusmodi quaestionibus exequendis.
Quid mali INCREMENTUM et TERMINUS?
Ut prius dictum, OFFSET
ΠΈ LIMIT
Bene praestant in inceptis quae non opus habent cum magna copia rerum datarum.
Difficultas oritur, cum tantae magnitudinis datorum crescit ut memoria servientis iam non congruat. Autem, cum hoc database opus, paginatis quaestionibus uti debes.
Ad hoc problema ut se ipsum manifestet, condicionem esse oportet in qua DBMS ad operationem Scan plenae tabulae inhabilis in singulis interrogationibus paginatis adhibita (dum insertio et deletio operationes fieri possunt, et notitias iam non opus est!).
Quid est "mensa plena scan" (vel "mensa sequentialis scan", Sequentialis Scan)? Haec est operatio per quam DBMS sequentiter legit singulos ordines tabulae, id est, notas in ea contentas, easque ad obsequium datae conditionis inhibet. Hoc genus mensae scan tardissimum esse constat. Res est cum agitur, multae operationes input/output fiunt quae subsystem orbis ministri involvunt. Res deteriorem facit per latentiam consociata cum operando cum notitia super orbis reposita, et quod notitia ex orbe in memoriam transferens est operatio intensiva resource.
Exempli gratia: monumenta users of 100000000 habes et quaesitum curris cum fabrica OFFSET 50000000
. Hoc significat quod DBMS omnia haec monumenta onerare debebunt (et nos etiam illis non egemus), ea in memoriam repone, et postea accipias, dicens, 20 eventus relatus in. LIMIT
.
Hoc dicamus fortasse hoc spectare: "ordo seligi ab 50000 ad 50020 ab 100000". Hoc est, systema primum opus est ut 50000 ordines onerare ut quaestionem perficiat. Videsne quantum opus sit supervacuum?
Si mihi non credis, vide exemplum quod liniamenta creavi utens
Exemplum apud db-fiddle.com
ibi ad sinistram in agro Schema SQL
exstat codicem qui 100000 ordines datorum inserens, et dextrorsum, in agro Query SQL
Duo ostenditur quaestionis. Primus, tardus, similis hoc;
SELECT *
FROM `docs`
LIMIT 10 OFFSET 85000;
Secundum autem, quod est efficax ad idem problema, sic est.
SELECT *
FROM `docs`
WHERE id > 85000
LIMIT 10;
Ut has petitiones adimpleas, in pressione preme modo Run
in summa pagina. Quo facto, notitias de inquisitione temporis exsecutionis comparamus. Evenit ut exsequens interrogationem inefficacem saltem XXX vicibus sumat longiorem quam exequatur secundum (hoc tempus variatur ab currendo ad currendum; exempli gratia, ratio referre potest primam interrogationem 30 ms ad perficiendam, sed exsecutionem. secundo - 37 ms).
Et si plures notitiae sunt, omnia etiam peiora videbunt (hoc tibi persuadendum est, vide in
Quae modo disputavimus, intelligentiam aliquam tibi dare debent quomodo interrogationes datorum actu processit.
Nota quod altior valor OFFSET
β petitio longior erit ad perficiendum.
Quid loco utar compositionis INCREMENTUM et TERMINUS?
Instead of compositum OFFSET
ΠΈ LIMIT
Valet utens structura secundum sequentem schema:
SELECT * FROM table_name WHERE id > 10 LIMIT 20
Haec est quaestio exsecutionis cum cursore substructio paginationis.
Pro repono current ones localiter OFFSET
ΠΈ LIMIT
easque cum singulis petitionibus transmitte, ultimam primariam clavem receptam condere debes (hoc fere est ID
) et LIMIT
consequenter, queries similia supra habebuntur.
Quare? Punctum est quod expresse denotans identificem ultimi ordinis legunt, narra DBMS tuam ubi necesse est ut perscrutetur notitias necessarias. Investigatio praeterea, propter usum clavium, efficaciter agetur, ratio non debebit per lineas extra certum spatium distrahere.
Inspice hanc comparationem variarum quaesitionum. Hic quaestio inefficax est.
Patiens petitionem
Et hic est versio optimized rogationis.
Velox petitionem
Utrumque queries eandem prorsus quantitatem datae reddere. Sed prima in 12,80 secundis perficitur, et secunda in secunda 0,01 est. Sentisne differentiam?
potential problems
Proposita interrogatione methodus ad efficaciter operandum, tabula debet habere columnam (vel columnas) continens indices singulares, sequentes, ut integrum identificatorem. In quibusdam casibus specificis, hoc potest determinare successum utendi talibus quaestionibus ad augendam celeritatem operandi cum datorum.
Naturaliter, cum interrogationes construendi, specificas tabularum architecturas considerare debes et machinas illas eligere, quae in tabulis exsistentibus optime operabuntur. Exempli gratia, si in quaestionibus magnis voluminibus relatarum notitiarum laborare debes, eam interesting invenire poteris
Si prae oculis habemus quaestionem de absentis primario clavis, exempli gratia, si mensam habemus cum multis-ad-multis relationibus, tunc accessus traditionalis utendi utendi. OFFSET
ΠΈ LIMIT
certo conveniat. Sed usus eius potest in potentia tarde quaerere. In talibus casibus commendamus utendo auto-incremento primario clavem, etiamsi tantum opus sit ut interrogationes paginatas tractandas.
Si vos es interested in hoc loco -
results
Praecipua conclusio quam haurire possumus est quod, in quacumque quantitate databases de quo loquimur, semper necesse est celeritatem interrogationis exsecutionis resolvere. Hodiernae solutionum scalabilitas magni momenti est, et si omnia recte ab initio operandi in aliqua ratione disposita sunt, hoc in futurum e multis quaestionibus vitam servare potest.
Quomodo tu resolvere et optimize database queries?
Source: www.habr.com