Я пытался улучшить свою производительность запроса в течение нескольких дней в моем DB MySQL (8.4), но у меня проблемы с производительностью с следующими запросами (я попробовал оба): < /p>
SELECT sql_no_cache * FROM infracao.multas m
JOIN infracao.multasDataBase mdb
ON mdb.MultaId = m.Id
AND mdb.DtBase = '2025-01-01'
AND m.Renavam IN (SELECT Renavam FROM veiculo.VeiculoCliente vc WHERE vc.Renavam = m.Renavam AND vc.Cliente = 'CLT00188')
ORDER BY m.CollectedAt DESC, m.Id
LIMIT 1000, 1000;
-- or
SELECT sql_no_cache * FROM infracao.multas m
JOIN veiculo.VeiculoCliente vc
ON vc.Renavam = m.Renavam
AND vc.Cliente = 'CLT00188'
JOIN infracao.multasDataBase mdb
ON mdb.MultaId = m.Id
AND mdb.DtBase = '2025-01-01'
ORDER BY m.CollectedAt DESC, m.Id
LIMIT 1000, 1000;
< /code>
Индекс этих таблиц-следующее: < /p>
CREATE TABLE `VeiculoCliente` (
`Renavam` varchar(11) NOT NULL DEFAULT '',
`Cliente` varchar(8) NOT NULL DEFAULT '',
`DtInsercao` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`Cliente`,`Renavam`),
KEY `Idx_Renavam` (`Renavam`),
KEY `Idx_Cliente` (`Cliente`) /*!80000 INVISIBLE */
) ENGINE=InnoDB DEFAULT CHARSET=latin1 -- 190k rows
CREATE TABLE `multasDataBase` (
`MultaId` char(36) NOT NULL DEFAULT '',
`DtBase` date NOT NULL,
[...]
PRIMARY KEY (`DtBase`,`MultaId`),
KEY `DtBaseIdx` (`DtBase`) /*!80000 INVISIBLE */,
KEY `Fk_infracao_infracaoDtBase_idx` (`MultaId`),
KEY `multasDataBase_Id_DtBaseIdx` (`DtBase` DESC,`MultaId`),
CONSTRAINT `Fk_infracao_infracaoDtBase` FOREIGN KEY (`MultaId`) REFERENCES `multas` (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 -- 2.4 milion rows
CREATE TABLE `multas` (
`Id` char(36) NOT NULL DEFAULT '',
[...]
`CollectedAt` datetime NOT NULL,
[...]
PRIMARY KEY (`Id`),
UNIQUE KEY `AitDetranGuia` (`AitDetran`,`Guia`),
UNIQUE KEY `unique_InfracaoKeySne` (`InfracaoKeySne`),
KEY `Renainf` (`Renainf`),
KEY `RenavamIdx` (`Renavam`),
KEY `InsertAtIdx` (`InsertedAtUtc`),
KEY `NormalizedAitIdx` (`NormalizedAit`),
KEY `AitSne` (`AitSne`),
KEY `CollectedAtIdxDesc` (`CollectedAt`),
KEY `multasOrgaoIdx` (`CodigoOrgao`),
KEY `multa_Id_CollectedAtIdxDesc` (`Id`,`CollectedAt`),
KEY `query_clientMultas_collectedat_idx` (`Renavam`,`CollectedAt` DESC, `Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 -- 708k rows
< /code>
И это план выполнения: < /p>
id,select_type,table,partitions,type,possible_keys,key,key_len,ref,rows,filtered,Extra
1,SIMPLE,vc,NULL,ref,"PRIMARY,Idx_Renavam",PRIMARY,10,const,3126,100.00,"Using index; Using temporary; Using filesort"
1,SIMPLE,m,NULL,ref,"PRIMARY,RenavamIdx,multa_Id_CollectedAtIdxDesc,query_clientMultas_collectedat_idx",RenavamIdx,13,veiculo.vc.Renavam,5,100.00,NULL
1,SIMPLE,mdb,NULL,eq_ref,"PRIMARY,Fk_infracao_infracaoDtBase_idx,multasDataBase_Id_DtBaseIdx",PRIMARY,39,"const,infracao.m.Id",1,100.00,NULL
Наибольшее количество строк расположено в infracao.multas , и мне нужно сортировать с помощью CollectedAt . Как вы можете видеть в плане выполнения, я получаю проблему с помощью временного; Использование Filesort , что сильно снижает производительность запроса.>
Я пытался улучшить свою производительность запроса в течение нескольких дней в моем DB MySQL (8.4), но у меня проблемы с производительностью с следующими запросами (я попробовал оба): < /p> [code]SELECT sql_no_cache * FROM infracao.multas m JOIN infracao.multasDataBase mdb ON mdb.MultaId = m.Id AND mdb.DtBase = '2025-01-01' AND m.Renavam IN (SELECT Renavam FROM veiculo.VeiculoCliente vc WHERE vc.Renavam = m.Renavam AND vc.Cliente = 'CLT00188') ORDER BY m.CollectedAt DESC, m.Id LIMIT 1000, 1000;
-- or
SELECT sql_no_cache * FROM infracao.multas m JOIN veiculo.VeiculoCliente vc ON vc.Renavam = m.Renavam AND vc.Cliente = 'CLT00188' JOIN infracao.multasDataBase mdb ON mdb.MultaId = m.Id AND mdb.DtBase = '2025-01-01' ORDER BY m.CollectedAt DESC, m.Id LIMIT 1000, 1000; < /code> Индекс этих таблиц-следующее: < /p> CREATE TABLE `VeiculoCliente` ( `Renavam` varchar(11) NOT NULL DEFAULT '', `Cliente` varchar(8) NOT NULL DEFAULT '', `DtInsercao` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`Cliente`,`Renavam`), KEY `Idx_Renavam` (`Renavam`), KEY `Idx_Cliente` (`Cliente`) /*!80000 INVISIBLE */ ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -- 190k rows
CREATE TABLE `multas` ( `Id` char(36) NOT NULL DEFAULT '', [...] `CollectedAt` datetime NOT NULL, [...] PRIMARY KEY (`Id`), UNIQUE KEY `AitDetranGuia` (`AitDetran`,`Guia`), UNIQUE KEY `unique_InfracaoKeySne` (`InfracaoKeySne`), KEY `Renainf` (`Renainf`), KEY `RenavamIdx` (`Renavam`), KEY `InsertAtIdx` (`InsertedAtUtc`), KEY `NormalizedAitIdx` (`NormalizedAit`), KEY `AitSne` (`AitSne`), KEY `CollectedAtIdxDesc` (`CollectedAt`), KEY `multasOrgaoIdx` (`CodigoOrgao`), KEY `multa_Id_CollectedAtIdxDesc` (`Id`,`CollectedAt`), KEY `query_clientMultas_collectedat_idx` (`Renavam`,`CollectedAt` DESC, `Id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 -- 708k rows < /code> И это план выполнения: < /p> id,select_type,table,partitions,type,possible_keys,key,key_len,ref,rows,filtered,Extra 1,SIMPLE,vc,NULL,ref,"PRIMARY,Idx_Renavam",PRIMARY,10,const,3126,100.00,"Using index; Using temporary; Using filesort" 1,SIMPLE,m,NULL,ref,"PRIMARY,RenavamIdx,multa_Id_CollectedAtIdxDesc,query_clientMultas_collectedat_idx",RenavamIdx,13,veiculo.vc.Renavam,5,100.00,NULL 1,SIMPLE,mdb,NULL,eq_ref,"PRIMARY,Fk_infracao_infracaoDtBase_idx,multasDataBase_Id_DtBaseIdx",PRIMARY,39,"const,infracao.m.Id",1,100.00,NULL [/code] Наибольшее количество строк расположено в infracao.multas , и мне нужно сортировать с помощью CollectedAt . Как вы можете видеть в плане выполнения, я получаю проблему с помощью временного; Использование Filesort , что сильно снижает производительность запроса.>
Я пытался улучшить свою производительность запроса в течение нескольких дней в моем DB MySQL (8.4), но у меня проблемы с производительностью с следующими запросами (я попробовал оба):
SELECT sql_no_cache * FROM infracao.multas m
JOIN...
Я пытался улучшить свою производительность запроса в течение нескольких дней в моем DB MySQL (8.4), но у меня проблемы с производительностью с следующими запросами (я попробовал оба):
SELECT sql_no_cache * FROM infracao.multas m
JOIN...
Я хочу получить все данные из 3 таблиц с общими именами столбцов. Но я хочу, чтобы таблицы тоже были ссылкой в другом столбце. SELECT *, TABLE_NAME AS id FROM table1 UNION SELECT *, TABLE_NAME AS id FROM table2 UNION SELECT *, TABLE_NAME AS id FROM...
Я создал запрос для поиска одного значения в нескольких таблицах. Он отлично работает и так, но я хочу выполнить поиск по нескольким полям в таблице «клиенты» (дополнительно «last_name» и «company_name»).
РЕДАКТИРОВАТЬ: я наблюдаю в Python то же поведение, что и в PHP. Кажется, что-то с MySQL.
Мы пытаемся обновить MySQL с 5.7 до 8.0. Наша кодовая база использует PHP MySQLi для запросов к нашему серверу MySQL. В наших тестовых конфигурациях мы...