mysql中的sql查询花费的时间太长

tyky79it  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(299)

我有一个查询的问题,这个查询需要很长时间才能找到记录,有时发送数据需要很长时间,有时对结果进行排序我说的是10到20秒,这个表不是超大的,我有更大的表,有数百万条记录,这个表与它们相比很小

SELECT idFactura,
       strNombre,
       intFolio,
       CH_razon_social AS strRazonSocial,
       CH_nombre_comercial AS strNombreComercial,
       CH_RFC AS strRFC,
       doubleTotal,
       intTimbrada,
       intCancelada,
       dateFechaHora,
       intStatus,
       strSerie,
       email_enviado,
       strFolioFiscal,
       numero_abonos,
       saldoInsoluto_pagos,
       tipo_comprobante,
       strSerieParc
  FROM tbl_factura2
 WHERE dateFechaHora >= '2018-05-06'
   AND dateFechaHora <= '2018-06-06'
   AND intTimbrada = 1
   AND intCancelada = 0
   AND cfdi_33 = 1
   AND RFC_usuario = 'NUSN900420SS5'
   AND numero_abonos = 0
   AND (strFormaPago = 'PPD'
    OR strMetodoPago = '99')
 ORDER 
    BY idFactura DESC;

当我使用命令时 EXPLAIN 这就是我得到的,你可以看到它正在 idx_compuesto7 但有时需要另一个索引,我知道这取决于什么 MySQL 是比较好的查询方式,我想知道我可以改变什么或者用别的方式来做这个查询来获得更好的性能,我知道 OR 在查询中可能会出现问题,但我尝试将查询作为两个不同的来删除 OR 但我也有同样的问题。 ***************************1. row***************************id: 1 select_type: SIMPLE table: tbl_factura2 type: ref possible_keys: idx_fecha,idx_timbrada,idx_cancelada,idx_formaPago,idx_cfdi33,idx_rfc_usuario,idx_strMetodoPago,idx_compuesto3,idx_compuesto4,idx_compuesto5,idx_compuesto6,idx_compuesto7,idx_compuesto8,idx_compuesto9,idx_compuesto10,idx_compuesto11,idx_compuesto12 key: idx_compuesto7 key_len: 52 ref: const rows: 40 Extra: Using where; Using filesort 如您所见,可能的行数是 40 records 但是当我运行这个查询时 1 record ,我不知道这是否可以接受,或者不考虑整个表的记录总数
这是这个表的所有索引的定义

+--------------+------------+-------------------------+--------------+---------------------------+-----------+-------------+----------+--------+------+------------+---------+
| Table        | Non_unique | Key_name                | Seq_in_index | Column_name               | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------------+------------+-------------------------+--------------+---------------------------+-----------+-------------+----------+--------+------+------------+---------+
| tbl_factura2 |          0 | PRIMARY                 |            1 | idFactura                 | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_contador            |            1 | idContador                | A         |        2248 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_fecha               |            1 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_timbrada            |            1 | intTimbrada               | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_cancelada           |            1 | intCancelada              | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_contadorSub         |            1 | idContadorSub             | A         |         131 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_folio               |            1 | intFolio                  | A         |        1578 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_formaPago           |            1 | strFormaPago              | A         |          13 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_email_enviado       |            1 | email_enviado             | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_cfdi33              |            1 | cfdi_33                   | A         |          59 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_status              |            1 | intStatus                 | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_serie               |            1 | strSerie                  | A         |         538 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_rfc_usuario         |            1 | RFC_usuario               | A         |       17991 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_facturaexcel        |            1 | facturaExcel              | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_razonSocial         |            1 | CH_razon_social           | A         |       33734 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_nombreComercial     |            1 | CH_nombre_comercial       | A         |        2620 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_RFC                 |            1 | CH_RFC                    | A         |       67469 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_folio_fiscal        |            1 | strFolioFiscal            | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_saldoInsoluto       |            1 | saldoInsoluto_pagos       | A         |           7 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_tipo_comprobante    |            1 | tipo_comprobante          | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_existe_facprincipal |            1 | existe_facturaPrinc_pagos | A         |           5 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_strMetodoPago       |            1 | strMetodoPago             | A         |           7 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto1          |            1 | idFactura                 | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto1          |            2 | idContador                | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto1          |            3 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto2          |            1 | idContador                | A         |        2306 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto2          |            2 | cfdi_33                   | A         |        3551 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto3          |            1 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto3          |            2 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto3          |            3 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto3          |            4 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto3          |            5 | RFC_usuario               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto4          |            1 | RFC_usuario               | A         |        4819 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto4          |            2 | intTimbrada               | A         |        5997 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto4          |            3 | intCancelada              | A         |        8705 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto4          |            4 | cfdi_33                   | A         |       11244 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto5          |            1 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto5          |            2 | RFC_usuario               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto5          |            3 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto5          |            4 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto5          |            5 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto6          |            1 | RFC_usuario               | A         |        3551 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto6          |            2 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto6          |            3 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto6          |            4 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto6          |            5 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto7          |            1 | RFC_usuario               | A         |        8995 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto7          |            2 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto7          |            3 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto7          |            4 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto7          |            5 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto7          |            6 | numero_abonos             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto7          |            7 | saldoInsoluto_pagos       | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto7          |            8 | tipo_comprobante          | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto8          |            1 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto8          |            2 | RFC_usuario               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto8          |            3 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto8          |            4 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto8          |            5 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto8          |            6 | strMetodoPago             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto8          |            7 | numero_abonos             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto9          |            1 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto9          |            2 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto9          |            3 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto9          |            4 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto9          |            5 | numero_abonos             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto9          |            6 | strFormaPago              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto9          |            7 | RFC_usuario               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto10         |            1 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto10         |            2 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto10         |            3 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto10         |            4 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto10         |            5 | numero_abonos             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto10         |            6 | strMetodoPago             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto10         |            7 | RFC_usuario               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto11         |            1 | RFC_usuario               | A         |        3696 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto11         |            2 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto11         |            3 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto11         |            4 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto11         |            5 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto11         |            6 | numero_abonos             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto11         |            7 | strFormaPago              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto12         |            1 | RFC_usuario               | A         |       12851 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto12         |            2 | dateFechaHora             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto12         |            3 | intTimbrada               | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto12         |            4 | intCancelada              | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto12         |            5 | cfdi_33                   | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto12         |            6 | numero_abonos             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
| tbl_factura2 |          1 | idx_compuesto12         |            7 | strMetodoPago             | A         |      269877 |     NULL | NULL   |      | BTREE      |         |
+--------------+------------+-------------------------+--------------+---------------------------+-----------+-------------+----------+--------+------+------------+---------+

对我来说,查询没有采用正确的索引,或者我需要创建另一个复合索引来解决这个问题。
这是查询中使用的字段的不同值的数目如果此信息对某人有用,您是否看到该信息和查询方式有问题?我希望你能帮我改进这个,谢谢。 ***************************1. row***************************count(distinct dateFechaHora): 260117 count(distinct intTimbrada): 2 count(distinct intCancelada): 2 count(distinct cfdi_33): 2 count(distinct RFC_usuario): 3621 count(distinct numero_abonos): 9 count(distinct strFormaPago): 19 count(distinct strMetodoPago): 161 total_records: 263320

jv2fixgn

jv2fixgn1#

第1步:去掉任何后面有列的索引 dateFechaHora . 当有一个范围在 WHERE ,对该列进行测试后,索引的使用停止。
第二步:摆脱 INDEX(a) 如果你有 INDEX(a,b) . 将此“规则”扩展到任何前缀。
对于此特定查询,以下是最佳索引:

INDEX(intTimbrada, intCancelada, cfdi_33, RFC_usuario, numero_abonos, -- in any order
      dateFechaHora)   -- last

参见索引食谱。
至于拆除 OR ,这可能有助于:

(
        SELECT  ...
            FROM  tbl_factura2
            WHERE  ...
              AND  strFormaPago = 'PPD'
    )
    UNION DISTINCT
    (
        SELECT  ...
            FROM  tbl_factura2
            WHERE  ...
              AND  strMetodoPago = '99' 
    )
    ORDER BY  idFactura DESC;

加上这两个指标:

INDEX(intTimbrada, intCancelada, cfdi_33, RFC_usuario, numero_abonos, strFormaPago,
      dateFechaHora)   -- last
INDEX(intTimbrada, intCancelada, cfdi_33, RFC_usuario, numero_abonos, strMetodoPago,
      dateFechaHora)   -- last

一般来说:如果你有 OR 妨碍了演出,
制造2 SELECTs ,将 OR 在每种情况下;
删除 ORDER BY 如果有( LIMIT 更为复杂;此处不包括。)
连接 SELECTsUNION ALL 如果您确定没有重叠,或者 UNION DISTINCT (慢一点)如果有重复的话。
使用帕伦斯,这样当你钉 ORDER BY 最后,它显然属于 UNION ,不是最后一个 SELECT .
根据我食谱中的相同规则创建两个新索引,每个索引一个 SELECT .
但是。。。 UNION 有一些开销,所以它可能会加快查询速度,也可能不会(我猜这对这个查询没有好处。)

相关问题