验证,由于DB2和MySQL这一块是一样的,所以,用了DB2做测试,测试脚本如下:
#!/bin/bash db2 "connect to sample" db2 "select tabname from syscat.tables where tabname='TEST'" if [ $? -eq 0 ] ; then echo "table alreay exist, will delete now" db2 "drop table test" fi db2 "create table test(col1 int, col2 int, col3 int)" db2 "create index testidx on test(col2, col3)" for (( i = 0; i < 1000; i++ )) do db2 "insert into test values($i, $i + 1000, $i + 2000)" > /dev/null done db2 runstats on table $USER.test and indexes all; db2expln -d sample -g -statement "SELECT * FROM test WHERE col2=1111" -output db2expln1.out db2expln -d sample -g -statement "SELECT * FROM test WHERE col2=1111 AND col3=2111" -output db2expln2.out db2expln -d sample -g -statement "SELECT * FROM test WHERE col2=1111 AND (col3=2111 OR col3=2112)" -output db2expln3.out db2expln -d sample -g -statement "SELECT * FROM test WHERE col2=1111 AND col3 >=2111 AND col3 < 2114" -output db2expln4.out db2expln -d sample -g -statement "SELECT * FROM test WHERE col3=2111" -output db2expln5.out db2expln -d sample -g -statement "SELECT * FROM test WHERE col2=1111 OR col3=2111" -output db2expln6.out db2 drop table test; db2 connect reset; 完成之后,查看执行计划,发现db2expln1.out~db2expln4.out的执行计划如下,用到了索引扫描:而db2expln5.out和db2expln6.out没有用到索引扫描:
