Límites de MySQL
- joebert
- Sledgehammer


- Registrado: Feb 10, 2004
- Mensajes: 13455
- Loc: Florida
- Status: Offline
Finalmente llegué alrededor de la parte de mi proyecto que tiene que hacer algo como esto ayer. Yo sólo quería hacer una nota de dos formas lo he intentado.
Heres el primer intento. El promedio es de 1,6 segundos para generar la página en el servidor de prueba.
Entonces, los theres el segundo intento, tiene 0,19 segundos en promedio para generar la página.
En ambas situaciones la página para generar un total de 15 categorías, una pareja no pare categorías que incluyen 1-10 subcategorías.
Im pensamiento sobre la adición de dos columnas a la tabla de categorías llamadas "min_id" y "Max" id "que se alinean con la columna insert_id en la mesa de mis relaciones que puedo usar con una cláusula ENTRE a reducir el número de filas que necesita para exploración. tengo que trabajar la forma de manejar la actualización de los índices de embargo.
Heres el primer intento. El promedio es de 1,6 segundos para generar la página en el servidor de prueba.
PHP Código: [ Select ]
$result = $db->query('SELECT category_id, label, description FROM ' . CATEGORIES_TABLE . ' WHERE soi = TRUE ORDER BY label ASC', MYSQLI_USE_RESULT);
while($row = $result->fetch_object())
{
$c->categories[] = $row;
}
$result->close();
$sql = $db->prepare('
SELECT wp.label, wp.path, wp.wallpaper_id
FROM ' . CAT_WP_RELATIONS_TABLE . ' rel
LEFT JOIN ' . WALLPAPERS_TABLE . ' wp
ON rel.wallpaper_id = wp.wallpaper_id
WHERE rel.category_id IN ((SELECT category_id FROM ' . CATEGORIES_TABLE . " WHERE ? IN(category_id, parent_id)))
ORDER BY rel.insert_order DESC LIMIT {$config->options->index->new_wallpapers->count}"
);
if(!$sql){$page->messages .= new message($db->error);}
else{$sql->bind_param('s', $c->category_id);}
foreach($c->categories as &$c->category)
{if(!$sql){continue;}
$c->category->url = sprintf($config->options->url->rewrite_mode ? $config->options->url->category_mask : 'index.php?category_id=%1$s&page=%3$s',
$c->category->category_id,
string_utils::htmlentities($c->category->label),
1
);
$c->category_id = $c->category->category_id;
$c->wallpapers = '';
if($sql->execute())
{
$sql->bind_result($c->wallpaper->label, $c->wallpaper->path, $c->wallpaper->wallpaper_id);
while($sql->fetch())
{
while($row = $result->fetch_object())
{
$c->categories[] = $row;
}
$result->close();
$sql = $db->prepare('
SELECT wp.label, wp.path, wp.wallpaper_id
FROM ' . CAT_WP_RELATIONS_TABLE . ' rel
LEFT JOIN ' . WALLPAPERS_TABLE . ' wp
ON rel.wallpaper_id = wp.wallpaper_id
WHERE rel.category_id IN ((SELECT category_id FROM ' . CATEGORIES_TABLE . " WHERE ? IN(category_id, parent_id)))
ORDER BY rel.insert_order DESC LIMIT {$config->options->index->new_wallpapers->count}"
);
if(!$sql){$page->messages .= new message($db->error);}
else{$sql->bind_param('s', $c->category_id);}
foreach($c->categories as &$c->category)
{if(!$sql){continue;}
$c->category->url = sprintf($config->options->url->rewrite_mode ? $config->options->url->category_mask : 'index.php?category_id=%1$s&page=%3$s',
$c->category->category_id,
string_utils::htmlentities($c->category->label),
1
);
$c->category_id = $c->category->category_id;
$c->wallpapers = '';
if($sql->execute())
{
$sql->bind_result($c->wallpaper->label, $c->wallpaper->path, $c->wallpaper->wallpaper_id);
while($sql->fetch())
{
- $result = $db->query('SELECT category_id, label, description FROM ' . CATEGORIES_TABLE . ' WHERE soi = TRUE ORDER BY label ASC', MYSQLI_USE_RESULT);
- while($row = $result->fetch_object())
- {
- $c->categories[] = $row;
- }
- $result->close();
- $sql = $db->prepare('
- SELECT wp.label, wp.path, wp.wallpaper_id
- FROM ' . CAT_WP_RELATIONS_TABLE . ' rel
- LEFT JOIN ' . WALLPAPERS_TABLE . ' wp
- ON rel.wallpaper_id = wp.wallpaper_id
- WHERE rel.category_id IN ((SELECT category_id FROM ' . CATEGORIES_TABLE . " WHERE ? IN(category_id, parent_id)))
- ORDER BY rel.insert_order DESC LIMIT {$config->options->index->new_wallpapers->count}"
- );
- if(!$sql){$page->messages .= new message($db->error);}
- else{$sql->bind_param('s', $c->category_id);}
- foreach($c->categories as &$c->category)
- {if(!$sql){continue;}
- $c->category->url = sprintf($config->options->url->rewrite_mode ? $config->options->url->category_mask : 'index.php?category_id=%1$s&page=%3$s',
- $c->category->category_id,
- string_utils::htmlentities($c->category->label),
- 1
- );
- $c->category_id = $c->category->category_id;
- $c->wallpapers = '';
- if($sql->execute())
- {
- $sql->bind_result($c->wallpaper->label, $c->wallpaper->path, $c->wallpaper->wallpaper_id);
- while($sql->fetch())
- {
Entonces, los theres el segundo intento, tiene 0,19 segundos en promedio para generar la página.
PHP Código: [ Select ]
$c->categories = array();
$result = $db->query('SELECT category_id, label, description FROM ' . CATEGORIES_TABLE . ' WHERE soi = TRUE', MYSQLI_USE_RESULT);
while($row = $result->fetch_object())
{
$row->sub_categories = array($row->category_id => $row->category_id);
$c->categories[$row->category_id] = $row;
}
$result->close();
$result = $db->query('
SELECT category_id, parent_id
FROM ' . CATEGORIES_TABLE . '
WHERE parent_id IN(' . implode(',', array_keys($c->categories)) . ')'
);
while($row = $result->fetch_object())
{
$c->categories[$row->parent_id]->sub_categories[$row->category_id] = $row->category_id;
}
$result->close();
$c->max_subs = 0;
foreach($c->categories as &$c->category)
{
$c->max_subs = max($c->max_subs, count($c->category->sub_categories));
}
foreach($c->categories as &$c->category)
{
$c->category->sub_categories = array_pad($c->category->sub_categories, $c->max_subs, current($c->category->sub_categories));
}
function __sort_cats_label($a, $b){return mb_strtolower($a->label) > mb_strtolower($b->label) ? 1 : -1;}
usort($c->categories, '__sort_cats_label');
$sql = $db->prepare('
SELECT wp.label, wp.path, wp.wallpaper_id
FROM ' . CAT_WP_RELATIONS_TABLE . ' rel
LEFT JOIN ' . WALLPAPERS_TABLE . ' wp
ON rel.wallpaper_id = wp.wallpaper_id
WHERE rel.category_id IN (' . implode(',', array_fill(0, $c->max_subs, '?')) . ")
ORDER BY rel.insert_order DESC LIMIT {$config->options->index->new_wallpapers->count}"
);
if(!$sql){$page->messages .= new message($db->error);}
foreach($c->categories as &$c->category)
{if(!$sql){continue;}
$c->category->url = sprintf($config->options->url->rewrite_mode ? $config->options->url->category_mask : 'index.php?category_id=%1$s&page=%3$s',
$c->category->category_id,
string_utils::htmlentities($c->category->label),
1
);
array_unshift($c->category->sub_categories, str_repeat('i', $c->max_subs));
call_user_func_array(array($sql, 'bind_param'), $c->category->sub_categories);
$c->wallpapers = '';
if($sql->execute())
{
$sql->bind_result($c->wallpaper->label, $c->wallpaper->path, $c->wallpaper->wallpaper_id);
while($sql->fetch())
{
$result = $db->query('SELECT category_id, label, description FROM ' . CATEGORIES_TABLE . ' WHERE soi = TRUE', MYSQLI_USE_RESULT);
while($row = $result->fetch_object())
{
$row->sub_categories = array($row->category_id => $row->category_id);
$c->categories[$row->category_id] = $row;
}
$result->close();
$result = $db->query('
SELECT category_id, parent_id
FROM ' . CATEGORIES_TABLE . '
WHERE parent_id IN(' . implode(',', array_keys($c->categories)) . ')'
);
while($row = $result->fetch_object())
{
$c->categories[$row->parent_id]->sub_categories[$row->category_id] = $row->category_id;
}
$result->close();
$c->max_subs = 0;
foreach($c->categories as &$c->category)
{
$c->max_subs = max($c->max_subs, count($c->category->sub_categories));
}
foreach($c->categories as &$c->category)
{
$c->category->sub_categories = array_pad($c->category->sub_categories, $c->max_subs, current($c->category->sub_categories));
}
function __sort_cats_label($a, $b){return mb_strtolower($a->label) > mb_strtolower($b->label) ? 1 : -1;}
usort($c->categories, '__sort_cats_label');
$sql = $db->prepare('
SELECT wp.label, wp.path, wp.wallpaper_id
FROM ' . CAT_WP_RELATIONS_TABLE . ' rel
LEFT JOIN ' . WALLPAPERS_TABLE . ' wp
ON rel.wallpaper_id = wp.wallpaper_id
WHERE rel.category_id IN (' . implode(',', array_fill(0, $c->max_subs, '?')) . ")
ORDER BY rel.insert_order DESC LIMIT {$config->options->index->new_wallpapers->count}"
);
if(!$sql){$page->messages .= new message($db->error);}
foreach($c->categories as &$c->category)
{if(!$sql){continue;}
$c->category->url = sprintf($config->options->url->rewrite_mode ? $config->options->url->category_mask : 'index.php?category_id=%1$s&page=%3$s',
$c->category->category_id,
string_utils::htmlentities($c->category->label),
1
);
array_unshift($c->category->sub_categories, str_repeat('i', $c->max_subs));
call_user_func_array(array($sql, 'bind_param'), $c->category->sub_categories);
$c->wallpapers = '';
if($sql->execute())
{
$sql->bind_result($c->wallpaper->label, $c->wallpaper->path, $c->wallpaper->wallpaper_id);
while($sql->fetch())
{
- $c->categories = array();
- $result = $db->query('SELECT category_id, label, description FROM ' . CATEGORIES_TABLE . ' WHERE soi = TRUE', MYSQLI_USE_RESULT);
- while($row = $result->fetch_object())
- {
- $row->sub_categories = array($row->category_id => $row->category_id);
- $c->categories[$row->category_id] = $row;
- }
- $result->close();
- $result = $db->query('
- SELECT category_id, parent_id
- FROM ' . CATEGORIES_TABLE . '
- WHERE parent_id IN(' . implode(',', array_keys($c->categories)) . ')'
- );
- while($row = $result->fetch_object())
- {
- $c->categories[$row->parent_id]->sub_categories[$row->category_id] = $row->category_id;
- }
- $result->close();
- $c->max_subs = 0;
- foreach($c->categories as &$c->category)
- {
- $c->max_subs = max($c->max_subs, count($c->category->sub_categories));
- }
- foreach($c->categories as &$c->category)
- {
- $c->category->sub_categories = array_pad($c->category->sub_categories, $c->max_subs, current($c->category->sub_categories));
- }
- function __sort_cats_label($a, $b){return mb_strtolower($a->label) > mb_strtolower($b->label) ? 1 : -1;}
- usort($c->categories, '__sort_cats_label');
- $sql = $db->prepare('
- SELECT wp.label, wp.path, wp.wallpaper_id
- FROM ' . CAT_WP_RELATIONS_TABLE . ' rel
- LEFT JOIN ' . WALLPAPERS_TABLE . ' wp
- ON rel.wallpaper_id = wp.wallpaper_id
- WHERE rel.category_id IN (' . implode(',', array_fill(0, $c->max_subs, '?')) . ")
- ORDER BY rel.insert_order DESC LIMIT {$config->options->index->new_wallpapers->count}"
- );
- if(!$sql){$page->messages .= new message($db->error);}
- foreach($c->categories as &$c->category)
- {if(!$sql){continue;}
- $c->category->url = sprintf($config->options->url->rewrite_mode ? $config->options->url->category_mask : 'index.php?category_id=%1$s&page=%3$s',
- $c->category->category_id,
- string_utils::htmlentities($c->category->label),
- 1
- );
- array_unshift($c->category->sub_categories, str_repeat('i', $c->max_subs));
- call_user_func_array(array($sql, 'bind_param'), $c->category->sub_categories);
- $c->wallpapers = '';
- if($sql->execute())
- {
- $sql->bind_result($c->wallpaper->label, $c->wallpaper->path, $c->wallpaper->wallpaper_id);
- while($sql->fetch())
- {
En ambas situaciones la página para generar un total de 15 categorías, una pareja no pare categorías que incluyen 1-10 subcategorías.
Im pensamiento sobre la adición de dos columnas a la tabla de categorías llamadas "min_id" y "Max" id "que se alinean con la columna insert_id en la mesa de mis relaciones que puedo usar con una cláusula ENTRE a reducir el número de filas que necesita para exploración. tengo que trabajar la forma de manejar la actualización de los índices de embargo.
Strong with this one, the sudo is.
- Anonymous
- Bot


- Registrado: 25 Feb 2008
- Mensajes: ?
- Loc: Ozzuland
- Status: Online
Octubre 21st, 2009, 2:38 am
1, 2
Para responder a este tema que necesita para ingresar o registrarse. Es gratis.
Publicar Información
- Total de mensajes en este tema: 16 mensajes
- Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 104 invitados
- No puede abrir nuevos temas en este Foro
- No puede responder a temas en este Foro
- No puede editar sus mensajes en este Foro
- No puede borrar sus mensajes en este Foro
- No puede enviar adjuntos en este Foro
