[quote]全表扫描,索引扫描各有适用的场合,全表扫描不代表效率一定差,索引扫描也不一定就代表高效。
在实际应用开发过程中,如何创建索引,根据什么字段创建索引是个很复杂的问题。这通常和查询是相关的。
不合适的索引不会带来性能的提升。例如:表test有一个字段op_code,100多万条记录只有几十个不同的值,如果仅用op_code作为查询条件,即使在op_code上创建索引,也不会带来查询性能的提升。
如果一张表只有几百条记录,全表扫描的效率更高,只是频繁的访问可能会导致过高的consistentgets,cpu资源可能会消耗多一点。
还是要具体情况具体分析。索引也是要占用空间的,而且扫描索引也要消耗不少资源。[/quote]
用Distinct会导致查询时数据库进行排序,数据量大时会大大增加查询的时间,就象union和
union all,在有几万条数据,where语句比较复杂时,union的查询时间会是union all的几百乃至几
千倍,就是因为union在查询时会排序。
但你的查询还必须用distinct. 你可以修改你的表结构,一般主从表之间出现多对多的关系是不正常的,如果能修改的话,去掉distinct速度会大大加快。
你也可以建索引,一般一个表建两三个索引正好,索引如果建多了,查询速度会快,当然,如果
这些索引你能用的着的话,但insert,update的速度就会变慢,相反,如果建少了,select慢,
insert,update快。
有时,你可以在where条件中加如sarrangeno<>'',或no >0,不要以为这是废话,认为
sarrangeno本来就不可能为空,no肯定大于零。但加了此语句之后,你的查询速度可能会增加几倍乃至
几十倍,因为他直接决定你的索引是否能够启用,记住,索引建了以后并不一定能够用上.
在实际应用开发过程中,如何创建索引,根据什么字段创建索引是个很复杂的问题。这通常和查询是相关的。
不合适的索引不会带来性能的提升。例如:表test有一个字段op_code,100多万条记录只有几十个不同的值,如果仅用op_code作为查询条件,即使在op_code上创建索引,也不会带来查询性能的提升。
如果一张表只有几百条记录,全表扫描的效率更高,只是频繁的访问可能会导致过高的consistentgets,cpu资源可能会消耗多一点。
还是要具体情况具体分析。索引也是要占用空间的,而且扫描索引也要消耗不少资源。[/quote]
用Distinct会导致查询时数据库进行排序,数据量大时会大大增加查询的时间,就象union和
union all,在有几万条数据,where语句比较复杂时,union的查询时间会是union all的几百乃至几
千倍,就是因为union在查询时会排序。
但你的查询还必须用distinct. 你可以修改你的表结构,一般主从表之间出现多对多的关系是不正常的,如果能修改的话,去掉distinct速度会大大加快。
你也可以建索引,一般一个表建两三个索引正好,索引如果建多了,查询速度会快,当然,如果
这些索引你能用的着的话,但insert,update的速度就会变慢,相反,如果建少了,select慢,
insert,update快。
有时,你可以在where条件中加如sarrangeno<>'',或no >0,不要以为这是废话,认为
sarrangeno本来就不可能为空,no肯定大于零。但加了此语句之后,你的查询速度可能会增加几倍乃至
几十倍,因为他直接决定你的索引是否能够启用,记住,索引建了以后并不一定能够用上.