请问,像下面这些条件需要建几个复合索引才合适呢?
然后在sql语句及复合索引中字段的前后排序有没有关系?//(在一个文章系统里较常用的几个查询)WHERE id>80547 AND find_in_set('27',sortid) AND islock=1 ORDER BY id DESC
WHERE id>80547 AND find_in_set('22',sortid) AND islock=1 AND attid='1' ORDER BY id DESC
WHERE id>80547 AND find_in_set('24',sortid) AND islock=1 AND topid='2' ORDER BY id DESC
WHERE find_in_set('22',sortid) AND islock=1 AND attid='1' WHERE id>80547 AND islock=1 AND author='2' ORDER BY id DESC
WHERE islock=1 AND author='1' ORDER BY id DESC
WHERE id>80547 AND islock=1 AND isbest='2' ORDER BY id DESC
其中id为自增ID也是主键,id>80547这个条件是为了省略过去查更多的数据。 我有尝试建立了两个,但都不见成效,不知还有什么地方可以改善的?请指点,谢谢。
CREATE INDEX idx_sortid_islock_attid_id ON article (sortid,islock,attid,id);
CREATE INDEX idx_author_islock ON article (author,islock);
还有一个问题,在InnoDB下count()相当的吃力,很慢,不知有没有其它方法?SELECT COUNT(id) FROM article WHERE find_in_set('3',sortid) AND islock=1 AND attid='1';上面这个统计竟然花了14.230s,14900条记录
然后在sql语句及复合索引中字段的前后排序有没有关系?//(在一个文章系统里较常用的几个查询)WHERE id>80547 AND find_in_set('27',sortid) AND islock=1 ORDER BY id DESC
WHERE id>80547 AND find_in_set('22',sortid) AND islock=1 AND attid='1' ORDER BY id DESC
WHERE id>80547 AND find_in_set('24',sortid) AND islock=1 AND topid='2' ORDER BY id DESC
WHERE find_in_set('22',sortid) AND islock=1 AND attid='1' WHERE id>80547 AND islock=1 AND author='2' ORDER BY id DESC
WHERE islock=1 AND author='1' ORDER BY id DESC
WHERE id>80547 AND islock=1 AND isbest='2' ORDER BY id DESC
其中id为自增ID也是主键,id>80547这个条件是为了省略过去查更多的数据。 我有尝试建立了两个,但都不见成效,不知还有什么地方可以改善的?请指点,谢谢。
CREATE INDEX idx_sortid_islock_attid_id ON article (sortid,islock,attid,id);
CREATE INDEX idx_author_islock ON article (author,islock);
还有一个问题,在InnoDB下count()相当的吃力,很慢,不知有没有其它方法?SELECT COUNT(id) FROM article WHERE find_in_set('3',sortid) AND islock=1 AND attid='1';上面这个统计竟然花了14.230s,14900条记录
现在的查询速度都比较慢,字段类型分别为:
sortid=varchar(32),
islock=tinyint(1),
attid=tinyint(2),
author=smallint(4),
topid=tinyint(1)
谢谢vinsonshen.有问过,但仍是不得到满意的效果所以继续折腾…
这个索引没用,因为前缀用得不对...
---那我要如何改善呢?select count(id) from article
---已试过,不加条件依然是很慢,查了下手册说InnoDB下加不加条件都是要全表扫描…
建议索引 (islock,author,id)