我有一個查詢的性能問題時。我有以下內容:MySQL的左連接緩慢增加和或條款
SELECT DISTINCT anuncios.id, precios.precio
FROM anuncios
LEFT JOIN precios ON ((
precios.idcentroanuncio = anuncios.idcentro
AND anuncios.tipoubicacion = 'centropropio'
AND precios.tipocentroanuncio = 'centro'
))
GROUP BY anuncios.id
LIMIT 0 , 30
花費0.001 seg。在另一方面,我有這樣的一個非常相似:
SELECT DISTINCT anuncios.id, precios.precio
FROM anuncios
LEFT JOIN precios ON (
(
precios.idcentroanuncio = anuncios.id
AND anuncios.tipoubicacion = 'centropropio'
AND precios.tipocentroanuncio = 'centro'
))
GROUP BY anuncios.id
LIMIT 0 , 30
也花費的同時,更多或更少。問題是,當我的兩個查詢合併成這一個:100。
SELECT DISTINCT anuncios.id, precios.precio
FROM anuncios
LEFT JOIN precios ON ((
precios.idcentroanuncio = anuncios.idcentro
AND anuncios.tipoubicacion = 'centropropio'
AND precios.tipocentroanuncio = 'centro'
)
OR (
precios.idcentroanuncio = anuncios.id
AND anuncios.tipoubicacion = 'centropropio'
AND precios.tipocentroanuncio = 'centro'
))
GROUP BY anuncios.id
LIMIT 0 , 30
這裏的執行時間乘以Theese兩個表應將描述:
Precios:
+-------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| usuario | varchar(40) | NO | MUL | NULL | |
| tipocentroanuncio | varchar(50) | NO | | NULL | |
| idcentroanuncio | int(10) unsigned | NO | MUL | NULL | |
| unidades | float | NO | | NULL | |
| tipounidades | varchar(15) | NO | | NULL | |
| precio | float | NO | | NULL | |
| otrosdatosprecio | varchar(100) | NO | | NULL | |
| principal | int(1) unsigned | NO | | NULL | |
+-------------------+------------------+------+-----+---------+----------------+
anuncios:
+------------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_ |
+------------------+------------------+------+-----+---------------------+------
,這是查詢的解釋:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE anuncios ALL NULL NULL NULL NULL 1048578 Using temporary; Using filesort
1 SIMPLE precios index idcentroanuncio idcentroanuncio 156 NULL 30 Using index
我在做什麼錯?這次合併兩個獨立快速運行的查詢是否合乎邏輯?
不一定會加速......在使用或聲明,即使索引列可能是殺手/ –