Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273

    chiave primaria su due campi

    Ciao a tutti,

    in una tabella ho una chiave primaria su due campi.
    vorrei sapere qual è il metodo più efficente per fare la query:

    select * from tabella where campo1=$campo1 and campo2=$campo2
    (dove campo1 e campo2 compongono la chiave)

    oppure

    select * from tabella where concat(campo1,campo2)=$campo1$campo2

    o se ci sono terzi metodi per riferisrsi in modo univoco alla chiave



    eraclito
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  2. #2
    select * from tabella where campo1=$campo1 and campo2=$campo2
    select * from tabella where concat(campo1, campo2)=concat($campo1, $campo2)

    sono identici. nel primo richiami due funzioni concat in meno e una AND in piu'. prova a vedere come la select usa l'indice oppure no.... (explain select ....)

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273
    Originariamente inviato da piero.mac
    select * from tabella where campo1=$campo1 and campo2=$campo2
    select * from tabella where concat(campo1, campo2)=concat($campo1, $campo2)

    sono identici. nel primo richiami due funzioni concat in meno e una AND in piu'. prova a vedere come la select usa l'indice oppure no.... (explain select ....)

    ma non c'è la possibilità di riferirsi alla chiave primaria con un unico termine?

    qualcosa tipo

    select * from tabella where primary=concat($campo1, $campo2)


    ho poi provato con explain (che non conoscevo) e mi dice:

    1 SIMPLE abb const PRIMARY PRIMARY 6 const 1 Using index
    1 SIMPLE vabb ref vabb_cod1 vabb_cod1 6 const 2743 Using where
    1 SIMPLE babb index NULL PRIMARY 16 NULL 710631 Using where; Using index

    non riesco però a capirne bene il significato, riesco a sfruttare le chiavi o no?

    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  4. #4
    i campi che elenchi con explain hanno un nome. vedi quale voce corrisponde ai valori.

    in un caso usa index, un altro il where, e nell'ultimo la scelta del where usando index.


    per quanto riguarda la select con il
    where concat(campo1, campo2)
    e come se usassi
    where chiave_primaria

    non vedo dove sia il problema.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273
    Originariamente inviato da piero.mac
    i campi che elenchi con explain hanno un nome. vedi quale voce corrisponde ai valori.

    in un caso usa index, un altro il where, e nell'ultimo la scelta del where usando index.


    per quanto riguarda la select con il
    where concat(campo1, campo2)
    e come se usassi
    where chiave_primaria

    non vedo dove sia il problema.
    il problema è che la query è molto onerosa,
    faccio un join fra tabelle con la clausola on su parti delle chiavi primarie attraverso SUBSTRING
    (che quindi devo usare insieme al concat) e stavo esplorando strade per ottimizzare la procedura...
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

  6. #6
    sicuramente e' piu' oneroso un substring() di un concat.

    Mi viene il dubbio che la tua chiave primaria non sia molto ottimizzata se devi usare un substring()....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di eraclito
    Registrato dal
    May 2002
    Messaggi
    1,273
    Originariamente inviato da piero.mac
    sicuramente e' piu' oneroso un substring() di un concat.

    Mi viene il dubbio che la tua chiave primaria non sia molto ottimizzata se devi usare un substring()....
    non è ottimizzata per nulla
    putroppo lavoro sull'esportazione di un db di cui non posso toccare il tracciato record...

    ha delle chiavi costruite dove ad esempio il record 000568 è inserito in una tabella come tk000568 e in un'altra come ak000568, e devo fare un'unione sui due campi...
    L'apprendere molte cose non insegna l'intelligenza
    Voglio avere dubbi più chiari

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.