很抱歉花时间的人...这是一个菜鸟错误,我在导入数据库时没有读取错误消息。
当我生成mysqldump时,一些表名称使用仅小写字母生成错误,导致导入时出错。
由于所有内容的索引都在错误的指令之后,因此我们从未执行过,因此我基本上进行了非索引的全表扫描,这就是为什么它需要永远加载结果。
我纠正了我的SQL文件并再次创建了数据库,它就像一个魅力。很抱歉浪费你的时间。
PS:我实际上将服务器提升到了16GB的RAM和6VCPU,它没有任何区别。
这会给你一个合理的24排吗?或者你依赖于从其他表中过滤?
WHERE P.`id_estatus_propiedad` = 1 ORDER BY FIELD(P.`destacada`, '1', '0') , FIELD(C.`id_tipo_cliente`, 1, 2, 3) , RAND() LIMIT 24
如果是,请考虑以下事项:
您当前的查询正在处理整行 地段 桌子,然后洗牌,最后只送24。
更好的方法是确定哪个24, 然后 去了解详情:
SELECT lots-of-stuff FROM ( SELECT id_propiedad FROM Propiedades AS P1 JOIN ... -- as few as needed to get to Clientes JOIN `Clientes` AS C1 ON C1.`id_cliente` = Em.`id_cliente` WHERE P1.`id_estatus_propiedad` = 1 ORDER BY FIELD(P1.`destacada`, '1', '0') , FIELD(C1.`id_tipo_cliente`, 1, 2, 3) , RAND() LIMIT 24 ) AS x JOIN `Propiedades` AS P ON P.id_propiedad = x.id_propiedad JOIN `OperacionesPorPropiedad` AS OP ON OP.`id_propiedad` = P.`id_propiedad` JOIN `Operaciones` AS O ON (O.`id_operacion` = OP.`id_operacion` ... ... -- no WHERE, GROUP BY, or LIMIT, but repeat the ORDER BY: ORDER BY FIELD(P.`destacada`, '1', '0') , FIELD(C.`id_tipo_cliente`, 1, 2, 3) , RAND()
回到性能差异的问题......
innodb_buffer_pool_size
GROUP BY
LIMITing
JOIN
TEXT
*
这些结合起来导致快/慢性能。我的建议,如果可行的话,可以消除大部分内容。
也 FotografiasPorPropiedad 需求 INDEX(id_propiedad, orden) (按任何顺序)。
FotografiasPorPropiedad
INDEX(id_propiedad, orden)