最近遇到一个很奇怪的的问题。
在一个表中,大概10万条数据,select count(*) from my_table like '%月亮%'
竟然需要8秒钟的样子。
奇怪的是,在另外一个测试环境中(我认为两个环境都相同),执行时间不到1秒都快疯了,各位达达能帮忙么?
不胜感激!
在一个表中,大概10万条数据,select count(*) from my_table like '%月亮%'
竟然需要8秒钟的样子。
奇怪的是,在另外一个测试环境中(我认为两个环境都相同),执行时间不到1秒都快疯了,各位达达能帮忙么?
不胜感激!
SQL> AS SELECT * FROM my_tab;然后再测试SQL>select count(*) from test_my_table like '%月亮%';看看用了多长时间
alter system flush shared_pool;
然后再执行看看。
估计使用8秒是全表扫描,可以试试以下:
select /*+ rule */count(*) from my_table where col_name like '%月亮%'
的方法貌似没有用
具体的查询过程是把“*”全部解析为表的列名,然后再集计
然而,select count(列名)
不用解析,直接集计得
select count(主键) from table_name 这样最好,如果没有主键,比如ID这样的,那么至少也要查询已经带索引的列,你试过就知道了,速度和给数据库带来的影响是完全不同的!