我们知道,MYSQL5.1开始支持水平分区功能。我们来尝试下如何在已经分区的表上面做查询优化。总体来说,优化的原则和对单独的表做优化是一样的,保证对磁盘上表的
我们知道,MYSQL 5.1开始支持水平分区功能。 我们来尝试下如何在已经分区的表上面做查询优化。
总体来说,优化的原则和对单独的表做优化是一样的,保证对磁盘上表的扫描次数减小。
我们的表结构如下:
这里已经插入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)
ALTER TABLE t1 ANALYZE PARTITION r0,r1;
SELECT * FROM t1 WHERE system_type in(1,2,3);
当然,我们的例子非常简单, 这里只是为了演示下在水平分区下如何进行SQL优化。
本文出自 “上帝,咱们不见不散!” 博客,网站空间,香港服务器租用,请务必保留此出处