mysql - una - La manera más eficiente de obtener el recuento de filas de la tabla
numero total de registros mysql (12)
¿No podría simplemente crear un registro en una tabla separada o lo que sea con una columna llamada Usuarios y ACTUALIZARLA con la última identificación insertada en el Registro de usuario?
Luego, simplemente verifica este campo con una simple consulta.
Puede ser difícil, pero funcionaría perfectamente.
Actualmente tengo una base de datos con más de 6 millones de filas y creciendo. Actualmente hago SELECT COUNT (id) FROM table; para mostrar el número a mis usuarios, pero la base de datos está creciendo y no necesito almacenar todas esas filas, excepto para poder mostrar el número. ¿Hay alguna manera de seleccionar el valor de auto_increment que se mostrará para que pueda borrar la mayoría de las filas en la base de datos? Usar LAST_INSERT_ID()
no parece funcionar.
A continuación se muestra la forma más eficaz de encontrar el siguiente valor AUTO_INCREMENT
para una tabla. Esto es rápido incluso en bases de datos que albergan millones de tablas, ya que no requiere consultar la base de datos de information_schema
potencialmente grande.
mysql> SHOW TABLE STATUS LIKE ''table_name'';
// Look for the Auto_increment column
Sin embargo, si debe recuperar este valor en una consulta, debe ir a la base de datos de information_schema
.
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ''DatabaseName''
AND TABLE_NAME = ''TableName'';
Al lado de la sugerencia de information_schema, esto:
SELECT id FROM table ORDER BY id DESC LIMIT 1
también debe ser muy rápido, siempre que haya un índice en el campo de identificación (que creo que debe ser el caso con auto_increment)
Ninguna de estas respuestas parece ser correcta. Los probé todos. Aquí están mis resultados.
Sending query: SELECT count(*) FROM daximation
91
Sending query: SELECT Auto_increment FROM information_schema.tables WHERE table_name=''daximation''
96
Sending query: SHOW TABLE STATUS LIKE ''daximation''
98
Sending query: SELECT id FROM daximation ORDER BY id DESC LIMIT 1
97
aquí está la captura de pantalla: https://www.screencast.com/t/s8c3trYU
Aquí está mi código PHP:
$query = "SELECT count(*) FROM daximation";
$result = sendquery($query);
$row = mysqli_fetch_row($result);
debugprint( $row[0]);
$query = "SELECT Auto_increment FROM information_schema.tables WHERE table_name=''daximation''";
$result = sendquery($query);
$row = mysqli_fetch_row($result);
debugprint( $row[0]);
$query = "SHOW TABLE STATUS LIKE ''daximation''";
$result = sendquery($query);
$row = mysqli_fetch_row($result);
debugprint( $row[10]);
$query = "SELECT id FROM daximation ORDER BY id DESC LIMIT 1";
$result = sendquery($query);
$row = mysqli_fetch_row($result);
debugprint( $row[0]);
No estoy seguro de por qué nadie ha sugerido lo siguiente. Esto obtendrá el valor auto_increment usando solo SQL (no es necesario usar el mysql_fetch_array
de PHP):
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE TABLE_NAME = ''table''
Si no tiene privilegios para "Mostrar estado", entonces, la mejor opción es crear dos activadores y una nueva tabla que mantenga el recuento de filas de la tabla de mil millones de registros.
Ejemplo:
TableA >> Billion Records
TableB >> 1 columna y 1 fila
Siempre que haya una consulta de inserción en TableA (InsertTrigger), incremente el valor de la fila en 1 TableB
Siempre que haya una consulta de eliminación en TableA (DeleteTrigger), disminuya el valor de la fila en 1 en TableB
Si solo se trata de obtener la cantidad de registros (filas), sugeriría usar:
SELECT TABLE_ROWS
FROM information_schema.tables
WHERE table_name=''the_table_you_want'' -- Can end here if only 1 DB
AND table_schema = DATABASE(); -- See comment below if > 1 DB
(al menos para MySQL) en su lugar.
prueba esto
Ejecute este SQL:
SHOW TABLE STATUS LIKE ''<tablename>''
y obtener el valor del campo Auto_increment
si obtienes el número máximo al escribir una consulta de selección, es posible que tu consulta arroje un valor incorrecto. por ejemplo, si su tabla tiene 5 registros, entonces su ID de incremento será 6 y si elimino el registro n. ° 5, su tabla tiene 4 registros con ID máximo es 4, en este caso obtendrá 5 como ID de incremento siguiente. en respuesta a eso, puede obtener información de la definición de mysql en sí misma. escribiendo el siguiente código en php
<?
$tablename = "tablename";
$next_increment = 0;
$qShowStatus = "SHOW TABLE STATUS LIKE ''$tablename''";
$qShowStatusResult = mysql_query($qShowStatus) or die ( "Query failed: " . mysql_error() . "<br/>" . $qShowStatus );
$row = mysql_fetch_assoc($qShowStatusResult);
$next_increment = $row[''Auto_increment''];
echo "next increment number: [$next_increment]";
?>
SELECT id FROM table ORDER BY id DESC LIMIT 1
puede devuelve la identificación máxima no auto incremento ID. ambos son diferentes en algunas condiciones
Controlador
SomeNameModel::_getNextID($this->$table)
MODELO
class SomeNameModel extends CI_Model{
private static $db;
function __construct(){
parent::__construct();
self::$db-> &get_instance()->db;
}
function _getNextID($table){
return self::$db->query("SHOW TABLE STATUS LIKE ''".$table."'' ")->row()->Auto_increment;
}
... other stuff code
}
$next_id = mysql_fetch_assoc(mysql_query("SELECT MAX(id) FROM table"));
$next_id[''MAX(id)'']; // next auto incr id
espero que sea útil :)