| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | 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
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |