- Karácsonyfaként világíthat a Thermaltake új CPU-hűtője
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
- Egészen nagy teljesítményspektrumon fedné le a mobil piacot az AMD
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- TCL LCD és LED TV-k
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Gaming notebook topik
- OLED TV topic
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Milyen TV-t vegyek?
- A Samsung hazánkban is piacra dob idén egy friss Micro LED tévét
- Házi hangfal építés
- Dell notebook topic
- Amlogic S905, S912 processzoros készülékek
Hirdetés
-
Saját Redmi Note 13 Pro+ a világbajnok focicsapatnak (és indiai rajongóiknak)
ma Argentína nemzeti válogatottjának mezével díszítik az új Redmi különkiadást.
-
Toyota Corolla Touring Sport 2.0 teszt és az autóipar
lo Némi autóipari kitekintés után egy középkategóriás autót mutatok be, ami az észszerűség műhelyében készül.
-
Az Apple iPadOS-t is megrendszabályozza az EU
it Az EB közölte: az Apple iPad táblagépekre írt iPadOS rendszere is kapuőrnek számít, az üzleti felhasználókra gyakorolt fontossága miatt.
Új hozzászólás Aktív témák
-
Apollo17hu
őstag
válasz szmegma #1350 üzenetére
Igazad van. Az a probléma, hogy én csak arra gondoltam, hogy a vizsgálandó intervallum beleesik-e a már foglalt időintervallumba. Lehet viszont olyan eset is, amikor csak átfedés van.
Módosítsd úgy a feltételt, hogy a foglalt jelzést a következő jelentse:
(workers_start_timestamp > desired_start_time AND workers_start_timestamp < estimated_completion_time)
OR
(workers_finish_timestamp > desired_start_time AND workers_finish_timestamp < estimated_completion_time)Ennek már jónak kell lennie.
-
martonx
veterán
szmegma, apollo17 ezt miért nem intézitek egymás között privátba? Kizárt dolognak tartom, hogy bárkinek is hasznos / érthető / követhető lenne egy bonyolultabb probléma megoldása közbeni vergődésetek.
[ Szerkesztve ]
Én kérek elnézést!
-
szmegma
aktív tag
-
bbTamas77
aktív tag
phpmyadminba szeretnék importálni, de nem igazán jön össze, ahogy szeretném:
sql utasítás:
LOAD DATA LOCAL INFILE '/blabla/ nev.txt'
INTO TABLE nev
FIELDS TERMINATED BY ':::'
ENCLOSED BY '"';Adatok amit importálni szeretnék:
:::::::::"John":::"Doe"
:::::::::"Albert":::"Smith"
:::::::::"Jimmy":::"Carr"
:::::::::"Anna":::"Bell"Importálás sikerül, viszont a négy rekord helyett csak két rekodot szúr be.
Öt mező van benne, ':::' jelet használok elválasztásra, oda nem írok semmit mert alapértelemzett érték van beállítva.
Shift+Enter használok a sorok közt, akkor se jó.[ Szerkesztve ]
-
Sk8erPeter
nagyúr
válasz martonx #1352 üzenetére
Speciel én abszolút passzív félként néha beleolvastam az eszmecserébe, igaz, már egy ideje elvesztettem a fonalat, de nem éreztem "vergődésnek", plusz sztem a topic elbírja a beszélgetésüket. Meg mondjuk jóval érdekesebb problémát járnak körül, mint hogy hogyan kell MySQL-ben levágni egy szóközt a szó elejéről, meg hasonló, mostanában előforduló rendkívül érdekfeszítő kérdések... Üdítőbb ezeknél egy érdemi kérdésről témázás, igaz, Apollo17hu lényegében másnak oldja meg a munkáját tök ingyen, mindenesetre a kitartásáért jár neki a virtuális sör.
Sk8erPeter
-
martonx
veterán
válasz Sk8erPeter #1357 üzenetére
Ez igaz, csak engem zavar, hogy akármikor benézek, mindig látom, hogy MySQL topikban esemény volt, aztán ide kattintva látom, hogy már megint egy 800 soros hsz. érkezett.
Persze azon el lehet témázni, hogy mi illik ide, meg mi nem. Szvsz a hogyan kell mysql-t telepíteni, meg miért fut le hibásan a select * from table lekérdezésem nem illik ide, mert aki ilyet kérdez, az meg se próbálja az agyát / guglit használni.
Ugyanakkor van az a szakmai mélység is, ami szintén nem illik ide, egyszerűen nem hiszem, hogy egy olyan komplexitású feladat, aminek a normális megfogalmazása, példa adatostól, egy - két alap lekérdezéssel több A4-es lapot venne igénybe, annak a megoldását egy fórum keretein belül kellene kiszenvedni.
Ráadásul most borítékolom, hogy a megoldás sem egy húsz soros sql script lesz a végén, ergo a topik tényleg semmit nem fog profitálni belőle.
Apollo-nak valóban nagy riszpekt érte, hogy ingyen ennyit segít, nem is ellene szólt az észrevételem, csak jeleztem, hogy ha ennyire ráér, meg ennyire érdekli a probléma, akkor vegye fel a kapcsolatot direktben szmegma-val, aztán skypeozzanak, emailezzenek, oldják meg egymás között.Én kérek elnézést!
-
szmegma
aktív tag
Na akkor egy temaba illo kerdes.
Pusztan pelda ertekkel biro kod, mivel fingom sincs:SELECT BETWEEN (DATE(CURDATE()+1) AND DATE_ADD(CURDATE()+1, INTERVAL 31 DAY)) AS dates
Hogyan lehet, kimenetkent megkapni a holnapi es azt azt koveto 31 nap datumait (31 darab rekord)? A fenti kodban probaltam szemleltetni, hogy egy hasonlo lekeressel a dates segedoszlopban szeretnem megkapni a kivan 31 nap datumat.
TV: JZ1000
-
martonx
veterán
válasz szmegma #1360 üzenetére
Hirtelenjében két módszer jutott az eszembe.
1. While ciklussal - SQL-ben ez nem túl szép, de ez pont az az eset, amikor érdemes használni.
2. Csinálsz magadnak egy naptár táblát, amibe pár évre előre eltárolod a napokat, hétvégéket, munkaszüneti napokat.Ismerve, hogy ez mihez kell neked, én a második megoldást javaslom, noha nem kis munka egy tisztességes naptár táblát összerakni pár évre előre magadnak.
Én kérek elnézést!
-
Jim-Y
veterán
Sziasztok!
Lenne egy olyan feladatom, hogy egy tartományt kéne feldarabolnom 1000-es szeletekre.
Példa:
from | to
2000 2999
3000 3999
5000 5999
stb...Ugye ez eddig egyszerű, ciklus, a ciklusváltozó 999-el növekszik, onnantól pedig megvan.
A kérdésem az lenne, hogy van-e erre valami szebb megoldás, illetve miben kéne ezt megcsinálnom? Tárolt eljárás, valamilyen ETL eszköz?
köszi
-
martonx
veterán
válasz fordfairlane #1366 üzenetére
Hehe, ez vicces megjegyzés volt. Attól, hogy te még nem használtad, ugyan próbálj már meg komolyabb logikát összerakni SQL-ben tárolt eljárás nélkül. Elhiszem, hogy kismillió olyan projekt van, amikben a két táblás alkalmazásnál a select * from tábla a maximum, amit használni kell. Ettől még hidd el vannak akik főállásban tárolt eljárásokat írnak, és nem azért mert éppen olyanjuk van.
Én kérek elnézést!
-
martonx
veterán
válasz fordfairlane #1368 üzenetére
Nem én írtam butaságot, hanem te, szóval elég lett volna vagy csak simán csöndbe maradnod, vagy bocsánatot kérni szmegma-tól, ha a beírásod miatt ismét hetekig próbálkozik tovább tárolt eljárás nélkül.
Ha esetleg arcoskodóra sikerültek volna az előző hozzászólásaim, akkor elnézést kérek mindenkitől.Az, hogy használjunk-e tárolt eljárásokat vagy sem, örök vitatéma, hetekig lehetne flamelni róla. Az esetek jó részében valóban el lehet lenni nélküle, viszont pont az szmegma-féle komplexebb lekérdezéseknél meg megkerülhetetlen a használata.
Én kérek elnézést!
-
fordfairlane
veterán
válasz martonx #1369 üzenetére
Nem a tárolt eljárások létjogosultságát vagy hasznosságát kérdőjeleztem meg, hanem azt, hogy minek kell azon köröket futni, hogy ki használta és ki nem (és jájjdeámátőr) Sokan nem használják, mert nem a klasszikus Oracle, Sybase, DB2 vagy MSSQL-en tanultak, a Mysql-be meg később került bele. Vagy azért nem használják, mert korlátozottak a lehetőségek és emiatt úgyis szükség van egy alkalmazásszerverre, és ha már van alaklmazásszerver, akkor azon implementálnak minden funkcionalitást. Vagy azért, mert a tárolt eljárások még annyira sem egységesek a különféle vendorok közt, mint az SQL lekérdezések. Nincs azon semmi meglepő, hogy ilyen körülmények közt csomóan nem nyúlnak hozzá, csak ha muszáj.
x gon' give it to ya
-
martonx
veterán
válasz fordfairlane #1370 üzenetére
Az esetleges fellengzős hozzászólásomért veled ellentétben én bocsánatot kértem. Arról pedig nem vagyok hajlandó flame-et folytatni, hogy bizonyos esetekben (bizonyos szektorokban ezek a bizonyos esetek mindennapiak, más szektorokban meg szökő évente jönnek csak elő) miért nélkülözhetetlen egy jól megírt tárolt eljárás.
Én kérek elnézést!
-
Sk8erPeter
nagyúr
válasz fordfairlane #1368 üzenetére
Bocs, hogy ezt mondom, de engem meg speciel sokkal jobban zavar az, hogy majd' minden webfejlesztős topicban előadod a Prohardver ügyvédjét, meg a "jaj nem is hiszem el, hogy mik mennek manapság, nem is fogom követni a topicot"-sirámot, mintha a kérdezők a segítségedre szorulnának, amikor valaki nem pont finomkodva tesz valami erősebb megjegyzést, és ezt kell elég sokszor olvasni tőled. Hidd el, a segítséged nélkül is általában meg tudják védeni magukat, nem kell mindig a haladó(bba)kkal összeveszni azon, hogy miért nem porcelánbabák módjára bánunk egymással. Az ilyeneken való hosszas OFF-olások legtöbbször rosszabbak, mint maguk a beszólások. (Pedig egy haladónak ugyanannyi joga van - nem feltétlenül jogosan! - beszólni valakinek, aki esetleg nem nézett utána rendesen, vagy furát kérdezett; de igaz, neked is természetesen van jogod beszólni a beszólásért csak nem biztos, hogy előrevisz.) Ezt nem sértésként mondtam, ne is vedd kérlek annak!
Sk8erPeter
-
Sk8erPeter
nagyúr
válasz martonx #1361 üzenetére
"noha nem kis munka egy tisztességes naptár táblát összerakni pár évre előre magadnak"
Most ezen agyaltam, mik lehetnek a buktatók?
Amúgy mintha itt az emberke pont ilyesmivel foglalkozna, hogy mikor vannak szünnapok, stb., bár a cikk minőségét nem néztem, csak gyorsan beletekergettem kíváncsiságból.
Ilyesmikre egyébként vannak kész célszoftverek, nem?Sk8erPeter
-
Jim-Y
veterán
válasz Sk8erPeter #1374 üzenetére
Végül tárolt eljárás lett belőle. Azért megosztom hátha valamire még használni lehet
DELIMITER $$
DROP PROCEDURE IF EXISTS `ranges` $$
CREATE DEFINER=`user`@`%` PROCEDURE `ranges`()
BEGIN
DECLARE v1 INT DEFAULT 2000000;
WHILE v1 < 9999999 DO
INSERT INTO test_table(range_from, range_to) VALUES (v1, v1+999);
SET v1 = v1 + 1000;
END WHILE;
END $$
DELIMITER ; -
martonx
veterán
válasz Sk8erPeter #1373 üzenetére
Nem is konkrét buktatókra gondoltam, hanem pl. az összes ünnepnapot, különös tekintettel a mozgó ünnepekre, mondjuk húsz évre előre meghatározni, elég babra munka tud lenni.
Azaz a végeredmény nem annyi, hogy egy szép nagy insert-tel feltöltesz minden napot, hanem utána az ünnepnapok, munkaszüneti napok, munkanap áthelyezések, hosszú hétvégék a macerásak.Én kérek elnézést!
-
bpx
őstag
válasz szmegma #1360 üzenetére
az a baj a mysqllel, hogy nincs benne egyszeru "generator" funkcio, mert egyebkent ez a feladat pl. arra is lefordithato, hogy generaljunk szamokat 1-31-ig es adjunk hozza ennyi napot a mostani datumhoz, ami tisztan SQL lenne
de rekurziv lekerdezessel megoldhato, csak kell egy olyan forras, amelynek legalabb 31 sora van
peldaul select SQL megoldas:select date_add(CURDATE(), interval o.num day) from
(select @n := @n + 1 as num
from information_schema.columns, (select @n := 0) n
limit 31) o;ezzel persze az a baj, hogy mindig az information_schema.columns-hoz (vagy amire epp meg van irva) kell nyulni + akar el is lehetne tarolni a szamokat 1-31-ig egy kulon tablaban (es nem kell feltalalni ujra a kereket naptar tablaval):
create table numbers (n int);
insert into numbers
select @n := @n + 1 as num
from information_schema.columns, (select @n := 0) n
limit 31;
select date_add(CURDATE(), interval n.n day) from numbers n;csak hat ez meg megint ronda (szerintem)
szemlelteteskeppen, Oracle-ben ez ennyi:
select sysdate + level from dual connect by level <= 31;
a dual tabla sajatossagai miatt ez raadasul sem diszkrol, sem a cache-bol nem olvas, nem kell PL/SQL-ezni meg context switch sincs
-
Apollo17hu
őstag
ez a feladat pl. arra is lefordithato, hogy generaljunk szamokat 1-31-ig es adjunk hozza ennyi napot a mostani datumhoz, ami tisztan SQL lenne
Pont ezt javasoltam neki én is, lévén MySQL-hez nem konyítok.
Az az Oracle-s kód a hsz.-ed végén tetszik, köszi. (Én mindig egy számokat tartalmazó segédtáblával oldottam meg eddig a hasonló problémákat.)
-
bbTamas77
aktív tag
Üdv.
Hogyan kaphatom meg sql-ben, két dátum között eltelt időt?
Van egy jövö dátum ÉÉÉÉ-HH-NN ÓÓ:PP:MM és egy jelen dátum ÉÉÉÉ-HH-NN ÓÓ:PP:MM formátumban.
A kettő időpont közi időt szeretném megkapni ÉÉÉÉ-HH-NN ÓÓ:PP:MM-ba.
[ Szerkesztve ]
-
martonx
veterán
válasz Sk8erPeter #1381 üzenetére
Ez igaz, de tudod mikor jut eszedbe minden évente, vagy két évente utánhúzni?
Mi pont idén szívtunk ezzel, amikor 5 évvel ezelőtt 5 évre előre belőttük az adatokat, aztán valamikor májusban tűnt fel elöször, hogy év eleje óta szarul számol pár algoritmus.Én kérek elnézést!
-
szmegma
aktív tag
az a baj a mysqllel, hogy nincs benne egyszeru "generator" funkcio...
Mondjuk ez tenyleg gaz.
Ugy sem megoldhato, hogy PHP generalna ki egy tombbe a datumokat es azt "tolteni be" a lekerdezesbe?A PHP tomb kimenete a 31 nap datuma:
$dates[] = '2013-08-01';
$dates[] = '2013-08-02';
$dates[] = '2013-08-03';
...MYSQL:
SET dates = '$dates';
date_add(CURDATE(), interval n.n day)
FROM dates nCsak kerdezem, mivel nem tudok rola szinte semmit.
Sk8erPeter Az tuti, hogy ugy lenne jo megcsinalni, hogy nem kene meg evente sem hozzanyulni.
TV: JZ1000
-
Speeedfire
nagyúr
Linux alatt, hogy tudok mysql jelszót cserélni parancssorban? Szerintem valami program tegnap felülcsapta amit beállítottam, ma meg már nem megy.
Nem akar beengedni.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
bpx
őstag
válasz Speeedfire #1384 üzenetére
-
Jim-Y
veterán
Sziasztok.
Egy ETL eszközzel töltök egy már meglévő táblához új adatokat úgy, hogy az eredeti táblát ki kellett egészítenem 2 új oszloppal, mert az új betöltésben már van két plusz oszlop.
Először ALTER tablellel hozzáadtam a kívánt két új oszlopot NULL default value-val, majd betöltöttem az adatokat.
Az eredmény az lett, hogy a régi táblában az új oszlopoknál null érték szerepel, az új soroknál pedig jó értékek. Igen ám, de ha lefuttatok egy lekérdezést, akkor ezek az új adatok is 'átállítódnak' null értékre.Kérlek ne nézzetek hülyének, én sem értem, hogy ha lefuttatom a selectet betöltés után akkor a jó értékek szerepelnek, ha írok a táblára egy query-t, lefuttatom (nem lesz jó az eredmény), majd lefuttatom megint a select * -ot akkor már nem jó értékek vannak benne, hanem csupa NULL.
Találkozott már valaki ilyennel?
-
Lacces
őstag
Hali,
Az lehetséges, hogy úgy kapok egy unique-al ellátott oszlopra duplicalt entry hibát, hogy az az érték sosem volt előtte benne az adatbázisban? Mert kidobta ezt a hibát, de el is mentette az adatokat. De elméletben én úgy tom, hogy nem is kellene, akkor adatokat mentenie sem.
És ez egyszeri esetnek tűnik... -
Jim-Y
veterán
sziasztok
Egy olyan problémába ütköztem, hogy van két táblám, mindkét táblában van két oszlop ami egy-egy tartományt jelöl ki
Példa:
Tábla 1:
Col1 Col2
1000 1999
2000 2999
3000 3999
...Tábla 2:
Col1 Col2
1000 5999
9000 17999
53000 120999
123000 124999
....Tábla1 a több soros, mivel itt ezresével vannak felbontva a tartományok (Range-ek)
Tábla2 kevesebb soros, ebben különböző méretű tartományok vannak.Tábla1-be, vagy egy új tábláva szeretnék bevezetni egy olyan oszlopot, hogy ha Tábla 1 tartománya beleesik Tábla 2 valamely tartományába, akkor az oszlop értéke legyen mondjuk true, ha nem akkor false.
Nem tudom, hogy érthető-e, a lényeg, hogy pl 1000 - 1999 beleesik-e Tábla 2 valameny tartományába (pl 9000 17999), ha belesik, akkor Tábla1 azon sorában ahol a tartomány van felvennék egy új oszlopot.
Remélem tudtok segíteni.
Jelenleg az a gond, hogy descart szorzattal fűzöm össze a két táblát, ilyenkor ugye végigiterál az össze soron.
Pl 1000-1999 tegyük fel beleesik Tábla 2 legelső tartományába, akkor nekem itt meg kéne állnom, és menni a következő sorra, mert most még végigmegy a többi soron, és ott nyílván már nem fog belesni a range-be így helytelen eredményt kapok :S
-
Apollo17hu
őstag
SELECT tabla_1.col1
,tabla_2.col2
,MIN(CASE
WHEN tabla_1.col_1 >= tabla_2.col_1 AND tabla_1.col_2 <= tabla_2.col_2 THEN
'I'
ELSE
'N'
END) flag
FROM tabla_1
,tabla_2
GROUP BY tabla_1.col1
,tabla_2.col2Itt nem 'TRUE' jelenik meg, hanem 'I', ha a 2. táblában legalább egy olyan tartomány van, amibe beleesik, 'N' pedig, ha nincs ilyen tartomány.
Nem ellenőriztem, próbálgasd...
Az elv az, hogy a Descartes-szorzatot a MIN() függvénnyel redukálod (méghozzá az 1. táblában szereplő sorok számára). A MIN() azért jó, mert az 'I' karakter előbb van az ABC-ben mint az 'N' karakter.
-
-
Jim-Y
veterán
válasz Sk8erPeter #1393 üzenetére
Még nem tudtam kipróbálni a kapott választ ezért nem válaszoltam, majd jövő héten.
Azok a tartományok, amik bővebbek, és amikből kevesebb van, azokat csv fájlokban kapok(unk) meg, és azt is egy ETL eszközzel töltjük be az adatbázisba. Időnként frissül. Az a tábla, ahol ezresek a felbontások, azt már én hoztam létre, mert az elvárás az, hogy ezres legyen a felbontás, ne pedig változó.
Az a feladat, hogy abban a táblában, ahol a bővebb felbontások vannak, 1-1 ilyen felbontásra meg van határozva valami, a példa kedvéért legyen az, hogy 'Fontos', 'Nem fontos'
Na, kipróbáltam az SQLFiddle-t, jó cucc, nem hallottam még róla
http://sqlfiddle.com/#!2/588bd6/3
És akkor talán így már világos a feladat is. T2 'range_jelolo' oszlopát szeretném feltölteni T1 'Jelolo' oszlopa alapján.
-
Apollo17hu
őstag
Akkor átírva a fentit ez jó?
SELECT t2.range_from
,t2.range_to
,MIN(CASE
WHEN t2.range_from >= t1.range_from AND t2.range_to <= t1.range_to THEN
'I'
ELSE
'N'
END) flag
FROM t1
,t2
GROUP BY t2.range_from
,t2.range_toszerk.: Tényleg jó a Fiddle, külön öröm, hogy van benne kódformázás is.
[ Szerkesztve ]
-
Jim-Y
veterán
válasz Apollo17hu #1395 üzenetére
Szia, igen jól működik köszönöm http://sqlfiddle.com/#!2/588bd6/14
-
Drótszamár
őstag
Üdv!
PHP + APACHE + MYSQL
Mérési adatokat kellene egy táblázatban tárolnom. Ritkán jön bele adat, de akkor sok. Egyszerre 10-20.000 adat érkezik, a tábla milliósra fog hízni idővel.
Van hozzá egy fapados tábla
ID, műszer_id, dátum, adat, küldés dátum.
A dupla tárolást úgy próbálom szűrni, hogy az insert előtt egy select-tel megnézem van e már erre a dátumra mérési adat.
SELECT dátum FROM tábla WHERE (műszer_id="xxx") and (dátum="2013.08.18 18:00:00" or dátum="..."); Maga a query rohadt nagy, 10-20.000 adatot kérek le egyszerre.
Kb 100.000 adatnál járok, és egyre lassul a törénet.
index van a műszer_id-re, és a dátumra is. MYSAM tábla.
Konfiguráción állítsak, vagy a logika a hibás? Hol a lassulás oka? A lekérdezés lassú, vagy az értelmezés is az pl a 10.000 "szöveges" dátum miatt? Vagy írjam át a kódot, és egyesével kérdezzem le?
Egy hasonló logika alapján felépített insert lefut egy fél pillanat alatt...
( 2b || !2b ) az itt a kérdés...
-
válasz Drótszamár #1397 üzenetére
Pontosan hogyan néz ki az index, és miért MYISAM?
-
Drótszamár
őstag
válasz Peter Kiss #1398 üzenetére
datum BTREE
Egyedi: Nem
Csomagolt: Nem
Számosság: 126492
Illesztés: A
Nulla: YESmuszer_id BTREE
Egyedi: Nem
Csomagolt: Nem
Számosság: 1
Illesztés: A
Nulla: YESMegszokásból MyISAM. Van erre a feladatra jobb tároló?
( 2b || !2b ) az itt a kérdés...
-
válasz Drótszamár #1399 üzenetére
InnoDB jobban bírja az INSERT-et.
---
Ez a két index haszontalan, 1-1 oszlop nagyon ritkán jó külön indexelve, készíts olyat, amiben az első oszlop a muszer_id és a második a datum. És azon túl, hogy haszontalan, feleslegesen rontja az insert-teljesítményt is.
Az ellenőrzésed nem tudom, hogyan néz ki pontosan, de a fenti query-t alapul véve inkább egy kellene:
SELECT dátum FROM tábla WHERE (műszer_id="xxx") and (dátum="2013.08.18 18:00:00" or dátum="...") LIMIT 1;
Vagy lehetne még EXISTS-et is használni.
Emellett nem tudom, hogyan futtatod ezeket? 1 INSERT előtt 1 SELECT? Lehet, hogy érdemes lenne előbb lemarni az összes kizáró tényezőt alkalmazás szinten, ha lehet, majd csak a ténylegesen beszúrandókat elküldeni, és így 2 hívásból megvan az egész.
---
Utolsó dolog, amire figyelni kellene, az a szerver beállítása, helyből a MySQL egy 10+ éves gépre van optimalizálva 5 MB memóriával.