MYSQL 查询优化,比较 3 个表和数千条记录
MYSQL Query optimization, comparing 3 tables w/ thousands of records
我有这个查询:
SELECT L.sku,L.desc1,M.map,T.retail FROM listing L INNER JOIN moto M ON L.sku=M.sku INNER JOIN truck T ON L.sku=T.sku LIMIT 5;
每个 table(listing、moto、truck)有 ~300.000 行,只是为了测试目的,我设置了 5 个结果的 LIMIT,最后我需要数百个,但让我们看看.. .
该查询在控制台中需要 3:26 分钟...我无法想象 PHP 需要多少时间...我需要在那里处理它
任何 advice/solution 优化查询?谢谢!
这里推荐两件事:
- 索引
- 反规范化
当数据库变得庞大时,人们倾向于做的一件事是调用 非规范化。这是当您将来自多个 table 的数据存储在一个 table 中以防止需要执行 join
时。如果您的应用程序依赖于特定的读取来为其提供动力,这将非常有用。这是缩放时常用的策略。
如果 Denormalization
不可能,另一种更简单的优化此查询的方法是确保您在 [=] 的列上有 indexes 35=] join
反对。因此需要对列 L.sku
、m.sku
、T.sku
进行索引,您会立即注意到性能的提高。
任何其他优化我需要更多关于数据的信息,希望对您有所帮助!
我有这个查询:
SELECT L.sku,L.desc1,M.map,T.retail FROM listing L INNER JOIN moto M ON L.sku=M.sku INNER JOIN truck T ON L.sku=T.sku LIMIT 5;
每个 table(listing、moto、truck)有 ~300.000 行,只是为了测试目的,我设置了 5 个结果的 LIMIT,最后我需要数百个,但让我们看看.. .
该查询在控制台中需要 3:26 分钟...我无法想象 PHP 需要多少时间...我需要在那里处理它
任何 advice/solution 优化查询?谢谢!
这里推荐两件事:
- 索引
- 反规范化
当数据库变得庞大时,人们倾向于做的一件事是调用 非规范化。这是当您将来自多个 table 的数据存储在一个 table 中以防止需要执行 join
时。如果您的应用程序依赖于特定的读取来为其提供动力,这将非常有用。这是缩放时常用的策略。
如果 Denormalization
不可能,另一种更简单的优化此查询的方法是确保您在 [=] 的列上有 indexes 35=] join
反对。因此需要对列 L.sku
、m.sku
、T.sku
进行索引,您会立即注意到性能的提高。
任何其他优化我需要更多关于数据的信息,希望对您有所帮助!