我有一个查询的问题,这个查询需要很长时间才能找到记录,有时发送数据需要很长时间,有时对结果进行排序我说的是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
1条答案
按热度按时间jv2fixgn1#
第1步:去掉任何后面有列的索引
dateFechaHora
. 当有一个范围在WHERE
,对该列进行测试后,索引的使用停止。第二步:摆脱
INDEX(a)
如果你有INDEX(a,b)
. 将此“规则”扩展到任何前缀。对于此特定查询,以下是最佳索引:
参见索引食谱。
至于拆除
OR
,这可能有助于:加上这两个指标:
一般来说:如果你有
OR
妨碍了演出,制造2
SELECTs
,将OR
在每种情况下;删除
ORDER BY
如果有(LIMIT
更为复杂;此处不包括。)连接
SELECTs
由UNION ALL
如果您确定没有重叠,或者UNION DISTINCT
(慢一点)如果有重复的话。使用帕伦斯,这样当你钉
ORDER BY
最后,它显然属于UNION
,不是最后一个SELECT
.根据我食谱中的相同规则创建两个新索引,每个索引一个
SELECT
.但是。。。
UNION
有一些开销,所以它可能会加快查询速度,也可能不会(我猜这对这个查询没有好处。)