2011-03-05 8 views
6

Hay esta tabla.La forma más rápida de insertar, si no existe, luego identifique en MySQL

| id | domain | 

id es la clave principal. domain es una clave única.

Quiero:

  1. insertar un nuevo dominio, si no existe ya.
  2. Consiga el id para ese dominio.

Ahora lo estoy haciendo de esta manera:

Entonces PDO::lastInsertId() para obtener el id.

Pero es fundamental que esto sea lo más rápido posible, así que pensé en preguntar: ¿Puedo hacer esto de una manera mejor?

+0

El CSS para 'ol li code' parece un poco apagado? – Znarkus

+0

¿Qué es la identificación? ¿Se usa solo como clave principal (es decir, es opaca para su aplicación?) –

+0

Sí. Lo uso para un registro de solicitud, y pensé que varchar sería expansivo para una tabla con muchas filas. – Znarkus

Respuesta

1

Hasta que alguien diga lo contrario, digo No, esa es la mejor manera.

0

Este método tiene un efecto secundario: "La identificación con incremento automático se incrementa en uno cada vez que se encuentra la clave duplicada".
Cuando la consulta se ejecuta con exemple.com como el valor primera vez , crea la entrada. Digamos que repites esa consulta 13 veces más. Después de que se intenta con xyz.com usted se sorprenderá al ver que en vez de incremento automático de id = 2 se obtiene 15.

1 exemple.com
15 xyz.com
25 pqr.com
50 THG .com

+0

Consulte esta pregunta http://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update – Znarkus

+0

El rendimiento de la inserción ... en la actualización de clave duplicada es subjetivo. Por favor, lea: http://mikefenwick.com/blog/insert-into-database-or-return-id-of-duplicate-row-in-mysql/ – AlphaLeader

Cuestiones relacionadas