有一定数据量的情况下(至少应该超过100万),当数据按照某个字段进行分区存储,且这个字段(或者几个字段)并没有创建索引,那么查询操作的性能将会有明显提高,而且数据表的数据量越大性能提高越明显;如果这个字段(或者几个字段)创建了索引,则查询操作的性能提升并不明显——因为检索还是依靠索引结构。在执行计划的分析结果中有一个列,名字叫做partitions。该列的信息实际上是说明执行计划可能涉及的分区情况。
5-2、关键性能点在我们根据SQL的执行计划进行查询语句和索引调整时,我们主要需要注意以下这些字段显示的值,以及它们背后所代表的性能表述。它们是:select_type列、type列、Extra列和key列。
5-2-1、select_type概要说明一个复杂的SQL查询语句,在进行执行时会被拆分成若干个子查询。这些子查询根据存在的位置、执行先后顺序等要素被分解为不同的操作类型。当然还有的操作可能不涉及到任何实际数据表,例如两个子查询间的连接操作过程。在执行计划分析结果的select_type列,显示了拆分后这些子查询的类型,它们是:
SIMPLE(常见):简单的 SELECT查询。没有表UNION查询,没有子查询(嵌套查询)。我们在本节之前内容中给出的示例基本上属于这种查询类型,它基本上不需要也不能再进行子查询拆分。
PRIMARY(常见):由子查询(嵌套查询)的SQL语句下,最外层的Select 作为primary 查询。
DERIVED(常见):在from语句块中的子查询,属于衍生查询。例如以下的查询中接在“from”后面的子查询就属于这种类型的子查询:
explain select * from (select * from t_interfacemethod_param where name = \'uid\') t_interfacemethod_param1