【发布时间】:2014-05-29 22:14:11
【问题描述】:
我正在使用 mysql5.1,我的表有大约 150 万(150 万)条记录。该表包含不同实体的记录,即所有主实体的子记录。
此表有 8 列,其中 6 列被合并为主键。 这些列可能是单独的外键,但由于性能原因,我们进行了此更改。
即使是带有两个条件的简单选择语句也需要 6-8 秒。以下是相同的解释计划。
查询
explain extended
select distinct location_code, Max(trial_number) as replication
from status_trait t
where t.status_id='N02'
and t.trial_data='orange'
group by location_code
EXPLAIN EXTENDED 的结果
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t index FK_HYBRID_EXP_TRAIT_DTL_2 5 1481572 100.00 Using where; Using index
我有这些问题:
- 如何处理大数据表
- 此表的索引是否正常
【问题讨论】:
-
lac 是我们很多人都不熟悉的度量单位。
-
150 万条记录似乎并不多。如果您有一个超过 6 个键的索引,则无助于按其中 2 个键过滤表。尝试为用于过滤的每个列添加单独的索引(如果不使用它们可能会占用大量空间)或尝试为用于过滤的每组列添加索引。
-
这确实有所不同,但由于我的执行时间仍然是 3.6 秒 我可以减少更多,现在我创建了两个索引之一,其中包含用于上述查询的列其他包括更多列。
-
你在这个表上创建了哪些索引?
-
如果您希望我们帮助优化查询,您需要向我们展示表和索引定义,以及每个表的行数。也许您的表格定义不佳。也许索引没有正确创建。也许您认为您在该列上没有索引。没有看到表和索引定义,我们无法判断。我们还需要行计数,因为这会极大地影响查询优化。如果您知道如何执行
EXPLAIN或获取执行计划,请将结果也放入问题中。如果您没有索引,请尽快访问use-the-index-luke.com。
标签: mysql optimization normalization explain