回 帖 发 新 帖 刷新版面

主题:SELECT的 in和 exists

在 gl_kxh 表中 查找 gl_kxh  列 中是否有 'AAA' 的记录:

SELECT COUNT(*) as kxh FROM gl_kxh WHERE kxh = 'AAA'

上面是我现在用的语句,随着表的数据量的增大,查询变得越来越慢,在网上查了一下,说COUNT(*)查询效率比较低,想改用  exists 或 in ,可是,写了几次老是出错,请各位老师给个代码,谢谢。

BTW: 我在gl_kxh表中已设置了索引,可是在查询中好像不起作用,Why ?

回复列表 (共9个回复)

沙发

1. 记得在初学的时候看到帮助文档中的SQL中有一句解释:SQL会自动使用索引来加快查询速度......
   到了今天,我已经不相信这一句话了。
   也许这一句话说的是对的,但估计那个索引是临时建立起来的,而不是你已经建立好的那个。

2. 既然有索引,为什么不这样子试试:
   SEEK "AAA"
   COUNT WHILE kxh="AAA"
   或
   COUNT FOR kxh="AAA"

板凳

Sorry, 忘说明了,数据库端为 SQL Server 2000

因此, Seek 对SQL是无效的

3 楼

up........

4 楼

in 和 exists用于子查询,前者用于非相关查询,后者用于相关查询。你现在只有一张表,没有必要用子查询。
如果分两步走,看看效果如何。
1.先生成一张“tmpAAA”的表,只有一个列
2.计数

SELECT 某个列名 into table tmpAAA FROM gl_kxh WHERE kxh = 'AAA'
SELECT COUNT(*) as kxh FROM tmpAAA

我没有很多记录的表,只是想象而已。请试试看。

5 楼

再存储过程中,用自连接方式!

6 楼

在 gl_kxh 表中 查找 gl_kxh  列 中是否有 'AAA' 的记录:
SELECT gl_kxh  as kxh FROM gl_kxh WHERE gl_kxh  like   '%AAA%'
SELECT gl_kxh  as kxh FROM gl_kxh WHERE gl_kxh  in ('AAA')

以上为SQL  SERVER 语法

7 楼

学习

8 楼

sorry,最近在忙四川的事,未能及时回复and加分,请谅解!!!

找到问题所在了,是我建错了索引,要的没建,建的没用到  ^_^

9 楼

速度绝对快:
SELECT 最短的字段名 FROM gl_kxh WHERE  at('AAA',kxh)=1 into array An1
?"数量:",_Tally

我来回复

您尚未登录,请登录后再回复。点此登录或注册