una recomendaciones optimizar lentas lenta cuello consultas consulta como botella avanzadas agilizar mysql ruby-on-rails activerecord ruby-on-rails-4 rails-console

recomendaciones - optimizar consulta en mysql



ActiveRecord agrega ''AND(1=0)'' al final de las consultas (1)

He estado jugando en la consola de los rieles tratando de hacer que las cosas funcionen, y me doy cuenta de que una de mis consultas sigue regresando a cero cuando no debería. Al mirar la consulta SQL generada, me doy cuenta de que se ha agregado AND (1=0) cada vez. Esto es un poco molesto, y no estoy seguro de por qué está haciendo esto.

Nota: Usando la gema acable.

Pasos para reproducir:

(Después de conectar a mesas en la consola de rieles)

2.1.2 :xxxx > @parent = Parent.take Parent Load (38.1ms) SELECT `parents`.* FROM `parents` LIMIT 1 => #<Parent id: 37, ...> 2.1.2 :xxxx > @child = Child.where(id: @parent.actable_id) SQL (0.7ms) SELECT `childs`.`id` AS t0_r0, `childs`.`attribute` AS t0_r1, FROM `childs` ... LEFT OUTER JOIN `parents` ON `parents`.`actable_id` = `childs`.`id` AND `parents`.`actable_type` = ''child type'' WHERE `childs`.`id` = 20 AND (1=0) => #<ActiveRecord::Relation []>

¿Por qué está pasando esto? ¿Cómo lo hago parar?


Rails generará SQL como AND (1=0) cuando consulta una columna cuyo valor está en una matriz vacía:

Child.where(id: [])

Intuitivamente, se esperaría que generara SQL como SELECT * FROM children WHERE id IN () , pero () realidad no es SQL válido. Sin embargo, dado que ninguna fila coincidirá con esa consulta, Rails soluciona esto generando una consulta equivalente que tampoco devuelve filas:

SELECT * FROM children WHERE 1=0;