Hirdetés
- sziku69: Fűzzük össze a szavakat :)
- droidic: Windows 11 önállóság nélküli világ: a kontroll új korszaka
- Luck Dragon: Asszociációs játék. :)
- Hadeska22: Fiio x Snowsky Tiny - Megoldás a (mesterségesen gerjesztett) problémára
- sziku69: Szólánc.
- Elektromos rásegítésű kerékpárok
- Pitterix: Gyógytorna
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Brogyi: CTEK akkumulátor töltő és másolatai
- Gép1: Renault Kangoo vizhűtő ventilátor fokozatok
Új hozzászólás Aktív témák
-
Brown ügynök
senior tag
válasz
martonx
#1315
üzenetére
Egy szimpla növekvő int index ellenben nem fog jelentős írás lassulást okozni.
Akkor ez azt jelenti, ha egy adatbázisban megfelelőn használjuk az idegen kulcsokat az nagy mértékben hozzájárul a teljesítmény növeléséhez?
Ahogy elnéztem egyébként, inkább az indexek hiánya lehet a ludas, mint a túl nagy száma. Úgy látom, ez egy összetett kérdés... Egyébként az program szinten nem akarok nagyon belenyúlni, mert elég mosott a kód. Igyekszem adatbázis oldalról javítani (ha lehet). Az igazi megoldást persze egy egészséges újraírás jelentené (és nem csak a lassú lekérdezések miatt).
-
Brown ügynök
senior tag
-
Brown ügynök
senior tag
válasz
Peter Kiss
#1310
üzenetére
Ilyen lekérdezéssel szerencsére én még nem találkoztam.

@martonx: Átnéztem a táblákat és nincs olyan nagy vegyítés a motoroknál.
Egyébként októberben költözik a cucc modernebb vasra, addig nézek valami okosságot a MySQL optimalizációjáról szóló fejezetében.
-
Brown ügynök
senior tag
@Athlon64+, @martonx: Akkor jobban elmerülök az indexelésben. Ez az a pont amin most könnyen javíthatok. (Egyébként nem tudom milyen vas szolgálja ki a rendszert, ennek majd utánaérdeklődöm.)
-
Brown ügynök
senior tag
Adott egy adatbázis kb. 200 táblával, melyet egyszerre maximum 10-15 használnak. Az itt felsoroltak közül melyek okozhatják a "slow query"-ket (illetve, hogy a rendszer többször érezhetően kegyelemért könyörög)?
a) Az egyik tábla 23 millió rekordot tartalmaz (a többi, 2 kivételével általában pár tízezret)
b) Optimalizálatlan lekérdezések
c) Adatbázis tervezési hibák
d) InnoDB, MyIsam vegyesen
e) Elavult MySQL verzió (5.1.49)
f) A MySQL ennyit bír
g) Vashiány
h) C-vitamin hiány
-
Brown ügynök
senior tag
válasz
Apollo17hu
#1259
üzenetére
A stock_intake tábla egy store_id-t is tartalmaz. Na, inkább megmutatom a táblákat.

intake
id, name, store_id, available, created, updatedintake_item
id, intake_id, product_id, quantityreservation
id, name, created, completedreservation_item
id, reservation_id, intake_id, product_id, quantityproduct_history
id, product_id, intake_id, reservation_id, store_id, createdMost úgy oldottam meg, hogy a product_history táblába felvettem a mennyiséget és a teljesülés dátumát (amikor ténylegesen ki/bevitték a raktárba az árut). Kvázi tehát kétszer lesz meg az adat, de nem tudtam máshogy megoldani, hogy a teljesülés dátuma szerint rendezze a bevitel és kivétel sorait a lekérdezésben. A product_history a változtatások után:
product_history
id, product_id, intake_id, reservation_id, store_id, quantity, created, completedA lekérdezés:
SELECT h.id, h.completed, quantity, r.name reservation_name, i.name intake_name,
i.created intake_created, r.created reservation_created
FROM stock_product_history h
LEFT JOIN stock_intake i ON i.id = h.intake_id
LEFT JOIN stock_reservation r ON r.id = h.reservation_id
AND r.completed BETWEEN :from AND :to
WHERE h.product_id = :productId
AND h.store_id = :storeId
AND h.completed BETWEEN :from AND :to
ORDER BY h.completed -
Brown ügynök
senior tag
válasz
Apollo17hu
#1254
üzenetére
Így már csak azokkal a beviteli és foglalási sorokkal tér vissza amik a megadott intervallumba esnek. Csak az a baj, hogy nem a product_history tábla created oszlopa szerint rendezi őket (gondolom a group by miatt). Úgy látom szinte az összes adatot be kell szúrnom az intake és a reservation táblából, hogy időrendben meg tudjam jeleníteni a mozgásokat... Köszi a segítséget!
SELECT *
FROM stock_product_history h
LEFT JOIN stock_intake_item it ON it.product_id = h.product_id
AND h.reservation_id is NULL
AND it.intake_id IN (SELECT id
FROM stock_intake
WHERE available BETWEEN :from AND :to
AND store_id = :storeId)
LEFT JOIN stock_intake i ON it.intake_id = i.id
AND i.available BETWEEN :from AND :to
LEFT JOIN stock_reservation_item ri ON ri.product_id = h.product_id
AND ri.reservation_id = h.reservation_id
LEFT JOIN stock_reservation r ON r.id = ri.reservation_id
AND r.completed BETWEEN :from AND :to
WHERE h.product_id = :productId
AND h.store_id = :storeId
GROUP BY ri.id, i.id
ORDER BY h.created ASC -
Brown ügynök
senior tag
válasz
Apollo17hu
#1252
üzenetére
A végcél az, hogy adott időszakra vonatkozóan megkapjuk egy termékről a raktári beviteleket (intake) és a teljesített foglalásokat (reservation) ami ez esetben a raktár kivétel lesz. Az i.available jelzi, hogy mikor van az áru ténylegesen a raktárban, a r.completed pedig azt, amikor teljesült a foglalás vagyis elvitték az árut. Foglalni a bevitelből lehet, tehát az intake_id a reservation táblában megvan.
-
Brown ügynök
senior tag
válasz
Apollo17hu
#1249
üzenetére
Valóban. Jelenleg úgy van megoldva, hogy egy sorban vagy az intake_id vagy a reservation_id mező van kitöltve a stock_product_history táblában. Megnéztem, ha egy oszlopba írom őket egy másikba meg a típust adom meg és úgy kérdezem le, akkor is ugyanaz lesz az eredmény (gondolom az előző ok miatt). Igazából egy cikktörténetet szeretnék lekérdezni az intake(_item) és a reservation(_item) táblák csatolásával. Hogy alakítsam át a lekérdezést vagy a stock_product_history táblát, hogy úgy működjön, ahogy szeretném? Meg lehetne ezt oldani stock_product_history tábla nélkül is?
-
Brown ügynök
senior tag
válasz
Apollo17hu
#1247
üzenetére
INNER-rel jó is lenne de akkor a reservation(_item) tábla sorait akkor nem kapcsolja hozzá.
-
Brown ügynök
senior tag
Segítséget szeretnék kérni a következő lekérdezéshez:
SELECT *
FROM stock_product_history h
LEFT JOIN stock_intake i ON h.intake_id = i.id
AND i.available BETWEEN :from AND :to
LEFT JOIN stock_intake_item it ON it.intake_id = i.id
AND it.product_id = :productId
LEFT JOIN stock_reservation r ON r.id = h.reservation_id
AND r.completed BETWEEN :from AND :to
LEFT JOIN stock_reservation_item ri ON ri.reservation_id = r.id
AND ri.product_id = :productId
WHERE h.product_id = :productId
AND h.store_id = :storeId
GROUP BY ri.id, i.idAzt szeretném elérni, hogy az intake_item és a reservation_item táblából csak azokat csatolja, amelyek megfelelnek intake és a reservation táblánál felállított dátum (available, completed) követelményeknek. Ezzel a lekérdezéssel olyan intake_item sort is kapok ami kívül esik az available tartományán ( bár minden értéke 0 vagy null).
-
Brown ügynök
senior tag
válasz
martonx
#1214
üzenetére
Köszi, így már működik:
SELECT i.product_id, SUM( i.quantity ) ,
( SELECT SUM( quantity )
FROM stock_deliver_item
WHERE product_id = i.product_id
) AS deliver
FROM `stock_intake_item` i
GROUP BY i.product_idHogy NULL-al is működjön a subqueryben az IFNULL() függvényt lehet használni.
-
Brown ügynök
senior tag
Van két táblám, egy a raktári bevételezést, a másik pedig a kivételt mutatja. Ennek a kettőnek az összességéből megkapjuk a raktárkészletet. Íme a két tábla:
Bevételezés

Kivétel

Ez a lekérdezés a vártnak megfelelően működik:
SELECT product_id, SUM( quantity )
FROM `stock_intake_item`
GROUP BY product_id
Ha viszont hozzácsapom a kivétel táblát:
SELECT i.product_id, SUM( i.quantity ) , SUM( d.quantity )
FROM `stock_intake_item` i
LEFT JOIN stock_deliver_item d ON d.product_id = i.product_id
GROUP BY i.product_id
Mi lehet a gond? Illetve, ilyen esetekben érdemes-e csinálni egy harmadik táblát ami tulajdonképpen az aktuális készletet tárolnánk?
-
Brown ügynök
senior tag
válasz
Fire/SOUL/CD
#675
üzenetére
Tipp: Automatikusan kitöltött mező, melynek értéke nem lehet 0 / értéket kell adni?
Új hozzászólás Aktív témák
- ASUS ROG Strix SCAR 17 csúcs gamer laptop, i9-12900H, RTX 3080 Ti, 360hz! Szép állapotban,dobozával.
- iPhone 14 Pro Max - 128 GB - Space Black - gyári tartozékokkal - szép állapotban
- Apple iPhone 15 Pro Max, független, megvigyázott, karcmentes állapotban
- Jamo S 805 front hangfal+ center
- HP ZBOOK Firefly 16 G10 /i7-1355U/16GB/1 TB SSD/FHD+/IPS/NVIDIA 4 GB/Gari
- HIBÁTLAN iPhone 15 Pro Max 256GB Black Titanium -1 ÉV GARANCIA - Kártyafüggetlen, MS3004
- Azonnali készpénzes nVidia RTX 4000 sorozat videokártya felvásárlás személyesen / csomagküldéssel
- HP Dell, Lenovo, Fujitsu, üzleti kategóriás notebook kiárusítás
- Eredeti, új Lenovo 330W töltők - ADL330SDC3A
- Bomba ár! Dell Vostro 3500 - i3-350M I 4GB I 320GB I DVDRW I 15,6" HD I HDMI I Cam I Garancia!
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: Promenade Publishing House Kft.
Város: Budapest






