本帖最后由 mark35 于 2012-11-29 20:04 编辑
我来演示下在大数据情况下不能选择合适索引的性能差别
dz72, 找了回帖数量为15661的主题执行楼主的SQL- SELECT p.* FROM cdb_posts p WHERE p.tid='149851' AND p.invisible='0' ORDER BY p.dateline LIMIT 20;
复制代码 1、只有dateline索引,无displayorder复合索引
第一次查询时间是 3900毫秒, 采用了dateline索引
第二次查询计划截图,时间是2400毫秒:
给部分数据量大的分表添加复合索引
- CREATE INDEX p122_1 ON posts_122_1 (tid, invisible, dateline);
- CREATE INDEX p122_2 ON posts_122_2 (tid, invisible, dateline);
- CREATE INDEX p117_1 ON posts_117_1 (tid, invisible, dateline);
- CREATE INDEX p117_2 ON posts_117_2 (tid, invisible, dateline);
- CREATE INDEX p230_1 ON posts_230_1 (tid, invisible, dateline);
- CREATE INDEX p230_2 ON posts_230_2 (tid, invisible, dateline);
- CREATE INDEX p24_1 ON posts_24_1 (tid, invisible, dateline);
- CREATE INDEX p24_2 ON posts_24_2 (tid, invisible, dateline);
- CREATE INDEX p25_1 ON posts_25_1 (tid, invisible, dateline);
- CREATE INDEX p25_2 ON posts_25_2 (tid, invisible, dateline);
- CREATE INDEX p26_1 ON posts_26_1 (tid, invisible, dateline);
- CREATE INDEX p26_2 ON posts_26_2 (tid, invisible, dateline);
- CREATE INDEX p27_1 ON posts_27_1 (tid, invisible, dateline);
- CREATE INDEX p27_2 ON posts_27_2 (tid, invisible, dateline);
复制代码 索引截图
第一次查询计划截图,时间是 7.6毫秒 ,规划器采用了displayorder索引
第二次查询结果,时间是 0.7毫秒
测试数据来自这个例子 Discuz能有多快? 见识下postgreSQL的强悍,对比下mysql的低能
这不过是在1万条记录上的差别,虽然都走了索引但不同索引的效率差别实在太大。如果数据量更大,并且是大OFFSET分页情况,差距会更加显著。
|