满足条件的记录数较少和多的情况下,SQL查询计划有哪些不同?在这种情况下,索引对它有什么影响?
2个回答
展开全部
你这么问范围太广了。
不过有一点可以在这里说明下,满足条件的记录少和多,并不能一概而论,这里的少和多应该是相对的。比如,如果你的表里有5000条记录,查出的结果有20条;的表里有50000条记录,查出的结果有100条,这两个哪个多。多和少主要看辨识度(自己起的名字,相同的内容的量越少,那么辨识度也就越高,本来应该有名字的,不过我不知道是什么,辨识度最好的索引,一般认为是每种组合只有一个,也就是主键索引和唯一索引的辨识度是最高的),这里第一个的辨识度就没有第二个高。
查询计划,认为走索引的时候,一般都是索引能够提高查询效率。如果你的表本身的内容还不是很多,那么如果不加规则的情况下,有时也会走全表扫描的,因为数据库认为全表扫描更省。
再假设一种情况,一张表中5000条记录,查出某条件下记录2000条。另外一个500条记录,查出某条件下也是记录50条。
这种情况下,第一个表中可能就不会走索引(仅仅是可能啊),因为索引的辨识度太低,导致服务器负载上升比较高,数据库认为不合适,可是不走索引的情况下会很慢,如果强制走索引,那么速度就会上去,可是同时负载也会升高。
第二个因为本身的记录数很少,可能也不会走索引,因为数据库认为这个很容易处理,没必要走,或者走索引的消耗和不走差不多,虽然他的辨识度高一些,可是可能也不会走。(上面的例子仅仅为了说明索引和表以及辨识度的一些关系的举例说明,不具实际意义啊)
也就是说一般来说,索引在数据量大的表、辨识度的字段上应用比较好,当然跟你的实际应用也有关系,索引建立的再好,没用也是白费。在这个基础上,比如在同一张表中,同样的查询条件下,第一次条件查出来为50条,第二次条件为100条,那么这100条大约比50条会多一些消耗,毕竟索引回表的碰撞也需要一些消耗的,但是理论上达不到两倍的关系。
不过有一点可以在这里说明下,满足条件的记录少和多,并不能一概而论,这里的少和多应该是相对的。比如,如果你的表里有5000条记录,查出的结果有20条;的表里有50000条记录,查出的结果有100条,这两个哪个多。多和少主要看辨识度(自己起的名字,相同的内容的量越少,那么辨识度也就越高,本来应该有名字的,不过我不知道是什么,辨识度最好的索引,一般认为是每种组合只有一个,也就是主键索引和唯一索引的辨识度是最高的),这里第一个的辨识度就没有第二个高。
查询计划,认为走索引的时候,一般都是索引能够提高查询效率。如果你的表本身的内容还不是很多,那么如果不加规则的情况下,有时也会走全表扫描的,因为数据库认为全表扫描更省。
再假设一种情况,一张表中5000条记录,查出某条件下记录2000条。另外一个500条记录,查出某条件下也是记录50条。
这种情况下,第一个表中可能就不会走索引(仅仅是可能啊),因为索引的辨识度太低,导致服务器负载上升比较高,数据库认为不合适,可是不走索引的情况下会很慢,如果强制走索引,那么速度就会上去,可是同时负载也会升高。
第二个因为本身的记录数很少,可能也不会走索引,因为数据库认为这个很容易处理,没必要走,或者走索引的消耗和不走差不多,虽然他的辨识度高一些,可是可能也不会走。(上面的例子仅仅为了说明索引和表以及辨识度的一些关系的举例说明,不具实际意义啊)
也就是说一般来说,索引在数据量大的表、辨识度的字段上应用比较好,当然跟你的实际应用也有关系,索引建立的再好,没用也是白费。在这个基础上,比如在同一张表中,同样的查询条件下,第一次条件查出来为50条,第二次条件为100条,那么这100条大约比50条会多一些消耗,毕竟索引回表的碰撞也需要一些消耗的,但是理论上达不到两倍的关系。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询