/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
select ... where (x,y) in (select ...) ine~
Fra : Leif Neland


Dato : 12-01-10 15:05

MySql
Jeg skal importere 20000 varer ind i en tabel, hvor
(producent,producent_varenr) skal være unikt. Det er de bare ikke, så
det skal tilrettes manuelt.

select prodid,p_vnr from imptab
group by 1,2
having count(*)>1

giver mig ca rækker på "no time"

Men jeg vil gerne have alle felterne, så jeg kan rette i tabellen (med
phpmyadmin)

select * from imptab where (prodid,p_vnr) in (
select prodid,p_vnr from imptab
group by 1,2
having count(*)>1)

tager 160 sekunder.
Jeg har index på både prodid,p_vnr og (prodid,p_vnr) (Det første er
unødvendigt, ved jeg, men nu tester vi...)

Kan det ikke gøres smartere/effektivere? Jeg vil gerne undgå at skulle
lave en løkke i php f.ex.

Dog, gentager jeg forespørgslen kort tid efter, tager det kun 0.0010 sec
, så noget må ligge i cache.

Leif

 
 
Leif Neland (12-01-2010)
Kommentar
Fra : Leif Neland


Dato : 12-01-10 16:05

Leif Neland wrote:
> MySql
> Jeg skal importere 20000 varer ind i en tabel, hvor
> (producent,producent_varenr) skal være unikt. Det er de bare ikke, så
> det skal tilrettes manuelt.
>
> select prodid,p_vnr from imptab
> group by 1,2
> having count(*)>1
>
> giver mig ca rækker på "no time"
>
> Men jeg vil gerne have alle felterne, så jeg kan rette i tabellen (med
> phpmyadmin)
>
> select * from imptab where (prodid,p_vnr) in (
> select prodid,p_vnr from imptab
> group by 1,2
> having count(*)>1)
>
> tager 160 sekunder.
> Jeg har index på både prodid,p_vnr og (prodid,p_vnr) (Det første er
> unødvendigt, ved jeg, men nu tester vi...)
>

Selvom et view bare er et select pakket ind, så fungere dette glimragende:

create view dobbelt as select prodid,p_vnr from imptab
group by 1,2 having count(*)>1

select imptab.* from imptab inner join dobbelt using (prodid,p_vnr)

Denne select tager cirka 0.01 sec. Det kan jeg godt leve med.

Leif

Søg
Reklame
Statistik
Spørgsmål : 177417
Tips : 31962
Nyheder : 719565
Indlæg : 6407868
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste