Estoy haciendo esta pregunta en nombre de un pequeño grupo de mis usuarios que tienen este problema.MySQL MAX_JOIN_SIZE errors
Una vez que la secuencia de comandos que están utilizando se pone al ID 21, se genera el siguiente error:
The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
He investigado esto tanto como sea posible y encontrado algo de una respuesta: http://dev.mysql.com/doc/refman/5.0/en/set-option.html
El El problema es que están en hosting compartido por lo que no pueden cambiar su configuración de MySQL para corregir los errores.
¿Hay algo que pueda escribir en mi script para que no tengan este problema?
Esta es la función que genera la consulta de la base de datos en función de qué módulos están cargados: $ sql = 'SELECCIONE aid como id, a.address como dirección';
$query = 'SELECT'
. ' name AS module_name'
. ', databasename AS module_database'
. ', pregmatch AS module_pregmatch'
. ', pregmatch2 AS module_pregmatch2'
. ', html AS module_html'
. ', sqlselect AS database_sqlselect'
. ', sqljoin AS database_sqljoin'
. ', sqlupdatewithvalue AS database_sqlupdatewithvalue'
. ', sqlupdatenovalue AS database_sqlupdatenovalue'
. ' FROM #__aqsgmeta_modules'
. ' WHERE enabled = 1'
. ' ORDER BY id';
$db->setQuery($query);
$results = $db->loadObjectList();
if (count($results) != 0) {
foreach ($results as $result) {
$sqlselect .= ', ';
$sqlselect .= $result->database_sqlselect;
$sqljoin .= ' ';
$result->database_sqljoin = preg_replace('/\{DATABASENAME\}/Ui', $result->module_database, $result->database_sqljoin);
if (!(preg_match("/" . $result->database_sqljoin . "/Ui", $sqljoin)))
$sqljoin .= $result->database_sqljoin;
}
}
if ($use_sh404sef)
$sqlselect .= ', g.oldurl AS sefurl';
$sql .= $sqlselect;
$sql .= ' FROM #__aqsgmeta_address AS a';
$sql .= $sqljoin;
if ($use_sh404sef)
$sql .= ' LEFT JOIN #__redirection AS g ON g.newurl = a.address';
$sql .=
//. ' WHERE a.id IN (' . $cids . ')'
' WHERE a.id = ' . $id
. ' ORDER BY a.address asc,a.id '
;
$db->setQuery($sql);
$rows = $db->loadObjectList();
¿Está absolutamente seguro de que la consulta está optimizada, es decir, no hay forma de obtener el mismo resultado con menos conjuntos de resultados intermedios? – VolkerK