прежде всего спасибо за ваше время, читая это.
Я работаю над веб-приложением PHP, которое имеет дело со следующими данными, на данный момент есть заметное время при попытке получить данные, особенно при детализации параметров. В настоящее время основными параметрами являются VehicleType, Make, Model, Year, InternetPrice и Mileage. Со временем будет использоваться еще больше столбцов. Другие столбцы из этого списка используются для отображения данных по всей странице, так как в одном экземпляре отображаются 10 записей.
Структура таблицы:
CREATE TABLE `vehicles` ( `id` int(12) NOT NULL AUTO_INCREMENT, `DealerID` int(6) DEFAULT NULL, `VIN` varchar(17) DEFAULT NULL, `StockNumber` varchar(10) DEFAULT NULL, `Status` varchar(1) DEFAULT NULL, `VehicleType` int(1) DEFAULT NULL, `Year` int(4) DEFAULT NULL, `Make` varchar(13) DEFAULT NULL, `Model` varchar(24) DEFAULT NULL, `Trim` varchar(35) DEFAULT NULL, `Body` varchar(25) DEFAULT NULL, `VehicleClass` varchar(50) DEFAULT NULL, `VehicleCategory` varchar(6) DEFAULT NULL, `Mileage` int(6) DEFAULT NULL, `Transmission` varchar(24) DEFAULT NULL, `EngineDisplacement` varchar(7) DEFAULT NULL, `EngineSize` varchar(15) DEFAULT NULL, `Induction` varchar(25) DEFAULT NULL, `DriveTrain` varchar(3) DEFAULT NULL, `FuelType` varchar(9) DEFAULT NULL, `FuelEconomyCity` int(2) DEFAULT NULL, `FuelEconomyHighway` int(2) DEFAULT NULL, `FuelEconomyCombined` int(1) DEFAULT NULL, `Doors` int(1) DEFAULT NULL, `OEMColorCodeExterior` varchar(10) DEFAULT NULL, `OEMColorCodeInterior` varchar(10) DEFAULT NULL, `OEMColorNameExterior` varchar(49) DEFAULT NULL, `OEMColorNameInterior` varchar(10) DEFAULT NULL, `GenericColorExterior` varchar(35) DEFAULT NULL, `GenericColorInterior` varchar(38) DEFAULT NULL, `InternetPrice` int(6) DEFAULT NULL, `ComparisonPrice` int(6) DEFAULT NULL, `WholeSalePrice` varchar(10) DEFAULT NULL, `MSRP` varchar(10) DEFAULT NULL, `InternetSpecial` varchar(1) DEFAULT NULL, `OemModelCode` varchar(12) DEFAULT NULL, `HasWarranty` varchar(1) DEFAULT NULL, `CertificationWarranty` int(3) DEFAULT NULL, `WarrantyMonth` int(1) DEFAULT NULL, `WarrantyMiles` int(1) DEFAULT NULL, `CertificationNumber` varchar(7) DEFAULT NULL, `ServiceContract` varchar(1) DEFAULT NULL, `InServiceDate` varchar(19) DEFAULT NULL, `CertificationDate` varchar(19) DEFAULT NULL, `DateManufactured` varchar(19) DEFAULT NULL, `DateCreated` varchar(19) DEFAULT NULL, `DateUpdated` varchar(19) DEFAULT NULL, `DateRemoved` varchar(19) DEFAULT NULL, `DatePhotosUpdated` varchar(19) DEFAULT NULL, `Photos` int(2) DEFAULT NULL, `SuperSizePhotos` int(2) DEFAULT NULL, `AddendumDetails` varchar(10) DEFAULT NULL, `DepartmentComments` varchar(239) DEFAULT NULL, `VehicleComments` varchar(1987) DEFAULT NULL, `Options` varchar(2264) DEFAULT NULL, `PurchasePayment` decimal(5,2) DEFAULT NULL, `PurchaseDownPayment` decimal(6,2) DEFAULT NULL, `PurchaseTerm` int(2) DEFAULT NULL, `PurchaseDisclosure` varchar(10) DEFAULT NULL, `PurchaseRate` decimal(3,2) DEFAULT NULL, `LeasePayment` decimal(2,2) DEFAULT NULL, `LeaseDownPayment` decimal(2,2) DEFAULT NULL, `LeaseTerm` int(1) DEFAULT NULL, `LeaseDisclosure` varchar(10) DEFAULT NULL, `LeaseRate` decimal(2,2) DEFAULT NULL, `LeaseResidual` decimal(2,2) DEFAULT NULL, `Reserved1` varchar(10) DEFAULT NULL, `Reserved2` varchar(10) DEFAULT NULL, `Reserved3` varchar(10) DEFAULT NULL, `Reserved4` varchar(10) DEFAULT NULL, `Reserved5` varchar(10) DEFAULT NULL, `Reserved6` varchar(10) DEFAULT NULL, `sitecert` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `VIN` (`VIN`), KEY `Make` (`Make`), KEY `StockNumber` (`StockNumber`), KEY `Model` (`Model`), KEY `Trim` (`Trim`), KEY `Body` (`Body`), KEY `VehicleClass` (`VehicleClass`), KEY `Transmission` (`Transmission`), KEY `DealerID` (`DealerID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=46527428 ;
И пример запроса:
SELECT *
FROM vehicles
WHERE Make = 'Audi'
AND VehicleType = '0'
AND Model = 'A4'
AND InternetPrice BETWEEN 0 AND 999999
AND Year BETWEEN 1983 AND 2015
AND Mileage > 0
AND DealerID IN ('AA'
,'156553'
,'229602'
,'160483'
,'2953'
,'161712'
,'228576'
,'228921'
,'7590'
,'20813'
,'158105'
,'160286'
,'164479'
,'164487'
,'182543'
,'158860'
,'186479'
,'227170'
,'226327'
)
ORDER BY sitecert DESC
,InternetPrice DESC
LIMIT 0, 10
Кто-нибудь может дать совет по оптимизации этого запроса или таблицы? Конечно, на странице есть другой код, но я приурочил его к этому запросу, который вызывает задержку.
Спасибо за вашу помощь!
ОБНОВИТЬ:
Объяснение MySQL:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE vehicles ref Make,Model,DealerID Model 75 const 1675 Using where; Using filesort
Год был обновлен до INT
EXPLAIN
, чтобы увидеть, как обрабатывается запрос? В частности, проверьте, выполняет ли он полное сканирование таблицы. - person Powerlord   schedule 10.03.2014EXPLAIN
для выявления узких мест. - person Achrome   schedule 10.03.2014explain
. Я посмотрю на нормализацию. В настоящее время в таблице 1 004 040 строк. - person ITAdminNC   schedule 10.03.2014