本文共 1178 字,大约阅读时间需要 3 分钟。
总体来说,优化的原则和对单独的表做优化是一样的,保证对磁盘上表的扫描次数减小。
我们的表结构如下:
这里已经插入2W多行数据进行测试。
看看这条查询。
SELECT * FROM t1 WHERE system_type IN (1,2) UNION ALL SELECT * FROM t1 WHERE system_type = 3;
这条语句对system_type字段过滤了两次,然后进行了一次UNION ALL。 但是不知道,其实对两个分区一共进行了三次全表扫描。
我们改成这样:
SELECT * FROM t1 WHERE system_type IN (1,3) UNION ALL SELECT * FROM t1 WHERE system_type = 2;
ALTER TABLE t1 ANALYZE PARTITION r0,r1; SELECT * FROM t1 WHERE system_type in(1,2,3);
id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 r0,r1 range NewIndex1 NewIndex1 1 \N 6462 Using where
当然,我们的例子非常简单, 这里只是为了演示下在水平分区下如何进行SQL优化。
转载地址:http://iqqno.baihongyu.com/