MySQL optimización de rendimiento de las consultas de MySQL paginación sola mesa un millón de registros de datos de optimización de rendimiento de la página

MySQL límite de paginación optimización de rendimiento de las consultas

 

Mysql paginación consulta es muy simple, pero cuando una gran cantidad de datos cuando se usa paginación general.

consulta tradicional de paginación: c1 SELECT, c2, ... cn FROM tabla LIMIT n, m

MySQL es limitar el principio de funcionamiento de los primeros n registros en frente de la lectura y, a continuación, deseche la primera n, ym se lee más adelante desea, por lo que n, mayor es el desplazamiento, peor será el rendimiento.

Recomendada método de consulta de búsqueda:

1, en la medida de lo posible dada la gama aproximada de consulta

  1. C1 SELECT , c2 , cn ...  FROM tabla donde id > = 20000  LÍMITE  10 ;

2, el método de sub-consulta

  1. C1 SELECT , c2 , cn ...  FROM tabla donde id > =
  2. (
  3. Identificación del SELECT FROM límite de la mesa  20 000 , 1
  4. )
  5. LÍMITE  10 ;

3, un libro de alto rendimiento método del índice de MySQL mencionado de sólo lectura

Antes de SQL optimización:

  1. C1 SELECT , c2 , cn ...  DE ORDEN POR LÍMITE miembro de last_active  50 , 5

SQL optimizado:

  1. C1 SELECT ,  c2 ,  cn  .. . 
  2. De miembro
  3. Combinación interna  ( SELECCIONAR MEMBER_ID DE ORDEN miembro POR LIMIT last_active  50 , 5 ) 
  4. USO  ( member_id )

La diferencia es que, antes de SQL necesidad de optimización más de E / S a los residuos, ya que el índice de leer, leer los datos, y luego desechar la línea sin la necesidad de. El SQL (pieza subconsulta) optimizado índice de sólo lectura (índice de cubierta) en él, y luego leer las columnas necesarias por member_id.

4, una primera lectura paso ID del programa y, a continuación el método para la lectura de un registro deseado IN

Programa lee ID:

  1. Identificación del SELECT FROM límite de la mesa  20 000 , 10 ; 
  2. C1 SELECT ,  c2 ,  cn  .. .  FROM tabla WHERE id en  ( ID1 ,  ID2 ,  IDN .. ).  

 

 

==============

 

 

el rendimiento de MySQL y limitar el uso del análisis de consultas de búsqueda y optimización

A, el uso de límite

Cuando usamos la consulta, a menudo a volver a las anteriores líneas intermedias o unos pocos de los datos, en esta ocasión cómo hacerlo? No se preocupe, ya MySQL proporciona la función de tal para nosotros.

SELECT * FROM table LIMIT [offset,] rows | `rows OFFSET offset ` (LIMIT offset, `length`) SELECT * FROM table where condition1 = 0 and condition2 = 0 and condition3 = -1 and condition4 = -1 order by id asc LIMIT 2000 OFFSET 50000 

cláusula LIMIT puede ser usado para forzar los SELECT devuelve el número especificado de registros. LIMIT toma uno o dos parámetros numéricos . El argumento debe ser una constante entera. Teniendo en cuenta dos parámetros, el primer parámetro especifica un retorno al primer registro de la fila 偏移量, el segundo argumento especifica el número máximo de filas devueltas . 初始记录行的偏移量是 0(而不是 1): Para la compatibilidad con PostgreSQL, MySQL también es compatible con la sintaxis: LÍMITE DE DESPLAZAMIENTO # #.

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 

// Para recuperar todas las filas de un extremo al conjunto de registros de desplazamiento, el segundo parámetro puede especificar -1:

mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. 

// dado sólo un parámetro, que representa el número máximo de filas devueltas:
mysql> SELECT * FROM table LIMIT 5; // recuperar las primeras filas 5
// En otras palabras, LIMIT n equivalentes a LIMIT 0,n .

En segundo lugar, la realización de análisis de paginación consulta MySQL

MySql comunicado paginación SQL, si la sintaxis TOP y MSSQL en comparación con la sintaxis LIMIT de MySQL tan elegante que buscar mucho. Utilizarlo para paginación es lo más natural.

La paginación forma más básica:

SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ... 

En el caso de pequeñas cantidades de datos, como SQL, suficiente, y el único problema es asegurarse de tener en cuenta el uso del índice:
Por ejemplo, si la instrucción SQL real como la siguiente, a continuación, category_id, ID en dos índice compuesto construir mejores :

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10 

La paginación sub-consulta:

A medida que aumenta la cantidad de datos, más y más páginas, SQL pocas páginas después de ver que podría ser:
SELECT * FROM artículos del DONDE category_id pedido por parte del anteriormente mencionado de id = 123 LÍMITE 10000, 10

En pocas palabras, que es el más atrasado LIMIT语句的偏移量就会越大,速度也会明显变慢de paginación .
En este punto, podemos mejorar la eficiencia de paginación a través de sub-consultas, de la siguiente manera:

SELECT * FROM articles WHERE id >= (SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10 

JOIN paginación

SELECT * FROM `content` AS t1 JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2 WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize; 

Después de mi prueba, Ingreso paginado y paginado eficiencia de la consulta sub en un nivel básico, el consumo de tiempo son básicamente los mismos.
explicar instrucción SQL:

id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> system NULL NULL NULL NULL 1 1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where 2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index 

¿Por qué es esto así? Debido a que el sub-consulta se realiza en el índice, mientras que una investigación general realiza en el archivo de datos, en términos generales, el archivo de índice es mucho más pequeño que el archivo de datos, por lo que la operación será más eficiente.

El patrón real puede utilizar una estrategia similar para hacer frente a la forma de paginación, como para determinar si es menos de un centenar de páginas, utilice la paginación forma más básica, superior a cien, el uso de paginación sub-consultas.

En tercer lugar, para la tabla de MySQL tiene una gran cantidad de datos, el uso de la presencia de una página muy serios problemas de rendimiento LÍMITE.

Consulta del registro después de la primera 30 1000000:

SQL代码1:平均用时6.6秒 SELECT * FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 30 SQL代码2:平均用时0.6秒 SELECT * FROM `cdb_posts` WHERE pid >= (SELECT pid FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 1) LIMIT 30 

En cuanto a eliminar todos los contenidos del campo , grandes cantidades de datos necesitan cruzar el primer bloque y eliminado, mientras que el segundo sustancialmente directamente 根据索引字段定位后,才取出相应内容, mejoran en gran medida la eficiencia de la natural. El límite de optimización, el límite no se utiliza directamente, pero en primer lugar llegar a Identificación del offset, y luego utilizar directamente el tamaño límite para obtener los datos.

Como se puede ver, la página siguiente, el desplazamiento será más grande comunicado LÍMITE, tanto la brecha de velocidad será más evidente.

aplicaciones prácticas, se puede utilizar una estrategia similar para tratar el modo de paginación manera, por ejemplo, para determinar si es menos de un centenar de páginas, utilice la paginación forma más básica, superior a cien, el uso de paginación sub-consultas.

idea de optimización:避免数据量大时扫描过多的记录

A fin de garantizar índice de columna de índice continua, cada mesa puede ser añadido a un campo de auto-energizante, y la adición de índice

Referencia: mysql desplazamiento de paginación es demasiado grande, la experiencia SQL optimización

 

 

========

 

 

MySQL sola tabla optimización del rendimiento de la página registros de un millón de datos

antecedentes:

¿Tienes una página web, ya que los datos grabados hasta una sola tabla de un millón, lo que resulta en un acceso muy lento datos, el análisis de fondo Google informe periódico de tiempo de espera, especialmente la página páginas grandes no es lento.

entorno de prueba:

Vamos a ser familiarizados con la declaración básica de SQL, el siguiente vamos a ver una prueba de la tabla de información básica

utilizar infomation_schema
SELECT * FROM mesas donde TABLE_SCHEMA = 'dbname' Y TABLE_NAME = 'producto'

resultados de la consulta:

En la figura anterior podemos ver la tabla de información básica:

Las filas de tabla: 866 633
longitud de los datos promedio de cada línea: 5133 bytes
solo tamaño tabla: 4,448,700,632 bytes

Sobre el tamaño de las filas de la tabla y la unidad está bytes, sabemos que después de calcular
la longitud promedio de la línea: alrededor de 5k
sola tabla Tamaño total: 4,1 g
campo de tabla tipos tiene varchar, fecha y hora, texto, etc., campo de clave principal ID

test

1. directo con arranque con límite, el estado de recuento de páginas, que he usado en el método del programa:

seleccionar * de arranque con límite de producto, contar
como la página de inicio es pequeño, no hay problemas de rendimiento de las consultas, buscamos respectivamente de 10, 100, 1000, 10000 tiempo de ejecución para iniciar la localización (página Tomar 20), de la siguiente manera:

seleccionar * de producto límite de 10, 20 0.016秒
seleccionar * de producto límite de 100, 20 0.016秒
seleccionar * de producto límite de 1000, 20 0.047秒
seleccionar * de producto límite de 10.000, 20 0.094秒

Hemos visto que con el aumento de la grabación inicial, el tiempo también con el aumento, lo que indica límite mención de paginación con el número de página de partida es una gran relación, entonces empezamos a grabar el cambio facie 40w (es decir, registro generalmente aproximadamente) seleccionar * de producto límite de 400.000, 20 3,229 segundos

Echamos un vistazo en el último tiempo registrado
select * from producto límite de 866.613, 20 37.44 Miao

No es extraño que los motores de búsqueda rastrean la página que a menudo informan de un tiempo de espera, como la página más grande de esta página Obviamente, esta vez
entre es intolerable.

A partir del cual podemos resumir dos cosas:
1) consulta de estados de límite de tiempo a la posición de inicio de la grabación es proporcional a
2) MySQL La declaración límite es muy conveniente, pero muchos de los registros de la tabla no son adecuados para su uso directo.

2. problema de optimización del rendimiento de límite de la paginación

Que abarca el uso de la tabla de índices para acelerar la consulta de paginación
que todos sabemos, el uso de la consulta índice si la declaración contiene sólo la columna de índice (que abarca los índices), entonces esta situación pronto consultas.

Debido a que el uso del índice de Búsqueda de algoritmos de optimización y datos de índice en la consulta anterior, no tiene que ir a tratar los datos pertinentes, esto ahorra mucho tiempo. Además MySQL también está relacionada con la memoria caché de índice, en un momento de alta concurrencia mejor uso de los efectos almacenamiento en caché.

En nuestro ejemplo, sabemos que el campo id es la clave principal, contiene de forma natural el índice de clave principal defecto. Ahora vamos a ver cómo utilizar un índice de cobertura resultados de la consulta:

La última página de los datos de consulta (que abarca el uso del índice contiene sólo la columna id), como sigue entre nosotros:
el SELECT id de producto límite de 866 613, 20 0,2 Miao
relativa para consultar todas las columnas de 37.44 segundos para mejorar en alrededor de 100 veces velocidad

Así que si tenemos que consultar todas las columnas, hay dos maneras, una es la id> = forma, y ​​el otro es para el uso se unen, mirada a la situación actual:

* SELECT FROM producto donde ID> = (seleccione ID de producto límite de 866 613, 1) Límite de 20
tiempo de consulta es de 0,2 segundos, y es simplemente un salto cualitativo ah, ja

Otra forma
SELECT * FROM producto de una unión (seleccione Identificación del producto límite de 866.613, 20) b = EN a.ID b.id
tiempo de consulta es muy corto, como!

De hecho, tanto un principio con el lugar, por lo que el efecto es casi

antecedentes:

¿Tienes una página web, ya que los datos grabados hasta una sola tabla de un millón, lo que resulta en un acceso muy lento datos, el análisis de fondo Google informe periódico de tiempo de espera, especialmente la página páginas grandes no es lento.

entorno de prueba:

Vamos a ser familiarizados con la declaración básica de SQL, el siguiente vamos a ver una prueba de la tabla de información básica

utilizar infomation_schema
SELECT * FROM mesas donde TABLE_SCHEMA = 'dbname' Y TABLE_NAME = 'producto'

resultados de la consulta:

En la figura anterior podemos ver la tabla de información básica:

Las filas de tabla: 866 633
longitud de los datos promedio de cada línea: 5133 bytes
solo tamaño tabla: 4,448,700,632 bytes

Sobre el tamaño de las filas de la tabla y la unidad está bytes, sabemos que después de calcular
la longitud promedio de la línea: alrededor de 5k
sola tabla Tamaño total: 4,1 g
campo de tabla tipos tiene varchar, fecha y hora, texto, etc., campo de clave principal ID

test

1. directo con arranque con límite, el estado de recuento de páginas, que he usado en el método del programa:

seleccionar * de arranque con límite de producto, contar
como la página de inicio es pequeño, no hay problemas de rendimiento de las consultas, buscamos respectivamente de 10, 100, 1000, 10000 tiempo de ejecución para iniciar la localización (página Tomar 20), de la siguiente manera:

seleccionar * de producto límite de 10, 20 0.016秒
seleccionar * de producto límite de 100, 20 0.016秒
seleccionar * de producto límite de 1000, 20 0.047秒
seleccionar * de producto límite de 10.000, 20 0.094秒

Hemos visto que con el aumento de la grabación inicial, el tiempo también con el aumento, lo que indica límite mención de paginación con el número de página de partida es una gran relación, entonces empezamos a grabar el cambio facie 40w (es decir, registro generalmente aproximadamente) seleccionar * de producto límite de 400.000, 20 3,229 segundos

Echamos un vistazo en el último tiempo registrado
select * from producto límite de 866.613, 20 37.44 Miao

No es extraño que los motores de búsqueda rastrean la página que a menudo informan de un tiempo de espera, como la página más grande de esta página Obviamente, esta vez
entre es intolerable.

A partir del cual podemos resumir dos cosas:
1) consulta de estados de límite de tiempo a la posición de inicio de la grabación es proporcional a
2) MySQL La declaración límite es muy conveniente, pero muchos de los registros de la tabla no son adecuados para su uso directo.

2. problema de optimización del rendimiento de límite de la paginación

Que abarca el uso de la tabla de índices para acelerar la consulta de paginación
que todos sabemos, el uso de la consulta índice si la declaración contiene sólo la columna de índice (que abarca los índices), entonces esta situación pronto consultas.

Debido a que el uso del índice de Búsqueda de algoritmos de optimización y datos de índice en la consulta anterior, no tiene que ir a tratar los datos pertinentes, esto ahorra mucho tiempo. Además MySQL también está relacionada con la memoria caché de índice, en un momento de alta concurrencia mejor uso de los efectos almacenamiento en caché.

En nuestro ejemplo, sabemos que el campo id es la clave principal, contiene de forma natural el índice de clave principal defecto. Ahora vamos a ver cómo utilizar un índice de cobertura resultados de la consulta:

La última página de los datos de consulta (que abarca el uso del índice contiene sólo la columna id), como sigue entre nosotros:
el SELECT id de producto límite de 866 613, 20 0,2 Miao
relativa para consultar todas las columnas de 37.44 segundos para mejorar en alrededor de 100 veces velocidad

Así que si tenemos que consultar todas las columnas, hay dos maneras, una es la id> = forma, y ​​el otro es para el uso se unen, mirada a la situación actual:

* SELECT FROM producto donde ID> = (seleccione ID de producto límite de 866 613, 1) Límite de 20
tiempo de consulta es de 0,2 segundos, y es simplemente un salto cualitativo ah, ja

Otra forma
SELECT * FROM producto de una unión (seleccione Identificación del producto límite de 866.613, 20) b = EN a.ID b.id
tiempo de consulta es muy corto, como!

De hecho, tanto un principio con el lugar, por lo que el efecto es casi

Supongo que te gusta

Origin www.cnblogs.com/xiami2046/p/12630374.html
Recomendado
Clasificación