インデックス作成に関して私は迷っています。私はクライアントのために構築しています適度に複雑なWebアプリケーションを持っており、それにはいくつかの数(*)は、すべての非常に遅い実行しているクエリ(0.3秒)複数のカウント(*)クエリのMySQLインデックス
ここ
SELECT COUNT(*) AS `count`
FROM `vehicles`
WHERE `VehicleLocation_province` = 'Alberta'
AND `default_image_URI` IS NOT NULL
AND `default_image_URI` != ''
がここにあります簡単な例がありますがあります説明..
1 SIMPLE vehicles ref VehicleLocation_province,VehicleLocation_province_... VehicleLocation_province 2 const 14128 Using where
私はできていなくても、適切なインデックスを使用するには、このクエリは、このよう
SELECT * , (6371 * ACOS(COS(RADIANS(53.543564)) * COS(RADIANS(lat)) * COS(RADIANS(lng) - RADIANS(- 113.490456)) + SIN(RADIANS(53.543564)) * SIN(RADIANS(lat)))) AS `distance`
FROM `vehicles`
WHERE `Make` = 'Pontiac'
AND `BodyStyle` = 'Sedan'
AND `VehiclePrice` >= '1'
AND `VehiclePrice` <= '36000'
AND `VehiclePrice` IS NOT NULL
AND `default_image_URI` IS NOT NULL
AND `default_image_URI` != ''
HAVING `distance` < 50
ORDER BY `VehicleReceivedDate` DESC LIMIT 25
など、より複雑なクエリのいくつかを気にしないで取得
私は一時テーブルとfilesorts可能性を避けるために必要がある知っている...しかし、どのように、これは事実上どこ変化させてそれぞれのリクエストで実行する必要があり、これらのCOUNT(*)クエリの際には、いくつかの達成さ
1 SIMPLE vehicles ref Make,BodyStyle,VehicleLocation_province_2 Make 99 const 5821 Using where; Using filesort
を説明パラメータのグループ化と順序付け
このInnoDBまたはMyISAMはありますか?パフォーマンス、インデックス作成、カウント(*)は完全に異なります。 – cherouvim
@cherouvim、確かに彼らは完全に異なっているわけではありません:) - いくつかの一般的なルールはまだ適用されます。 – Unreason
MyISAM。明らかにInnoDBのパフォーマンスに重大な影響を与えます(私が読んだので) – JeremyFelix