2021数据库考试题及答案 mysql题目和详细答案( 八 )


ref可用于使用’=’或'<=>’操作符作比较的索引列 。
5、 fulltext使用全文索引的时候是这个类型 。要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引
6、ref_or_null跟ref类型类似,只是增加了null值的比较 。实际用的不多 。
eg.SELECT * FROM ref_tableWHERE key_column=expr OR key_column IS NULL;7、index_merge表示查询使用了两个以上的索引,最后取交集或者并集,常见and,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取多个索引,性能可能大部分时间都不如range
8、unique_subquery用于where中的in形式子查询,子查询返回不重复值唯一值,可以完全替换子查询,效率更高 。该类型替换了下面形式的IN子查询的ref: value IN (SELECT primary_key FROM single_table WHERE some_expr)
9、index_subquery该联接类型类似于unique_subquery 。适用于非唯一索引,可以返回重复值 。
10、range索引范围查询,常见于使用 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN()或者like等运算符的查询中 。
SELECT * FROM tbl_nameWHERE key_column BETWEEN 10 and 20;SELECT * FROM tbl_nameWHERE key_column IN (10,20,30);11、index索引全表扫描,把索引从头到尾扫一遍 。这里包含两种情况: 一种是查询使用了覆盖索引,那么它只需要扫描索引就可以获得数据,这个效率要比全表扫描要快,因为索引通常比数据表小,而且还能避免二次查询 。在extra中显示Using index,反之,如果在索引上进行全表扫描,没有Using index的提示 。
# 此表见有一个name列索引 。# 因为查询的列name上建有索引,所以如果这样type走的是indexmysql> explain select name from testa;+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+| id | select_type | table | type| possible_keys | key| key_len | ref| rows | Extra|+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+|1 | SIMPLE| testa | index | NULL| idx_name | 33| NULL |2 | Using index |+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+1 row in set# 因为查询的列cusno没有建索引,或者查询的列包含没有索引的列,这样查询就会走ALL扫描,如下:mysql> explain select cusno from testa;+----+-------------+-------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_keys | key| key_len | ref| rows | Extra |+----+-------------+-------+------+---------------+------+---------+------+------+-------+|1 | SIMPLE| testa | ALL| NULL| NULL | NULL| NULL |2 | NULL|+----+-------------+-------+------+---------------+------+---------+------+------+-------+1 row in set# 包含有未见索引的列mysql> explain select * from testa;+----+-------------+-------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_keys | key| key_len | ref| rows | Extra |+----+-------------+-------+------+---------------+------+---------+------+------+-------+|1 | SIMPLE| testa | ALL| NULL| NULL | NULL| NULL |2 | NULL|+----+-------------+-------+------+---------------+------+---------+------+------+-------+1 row in set12、all全表扫描,性能最差 。
5. partitions版本5.7以前,该项是explain partitions显示的选项,5.7以后成为了默认选项 。该列显示的为分区表命中的分区情况 。非分区表该字段为空(null) 。
6. possible_keys查询可能使用到的索引都会在这里列出来
7. key查询真正使用到的索引 。select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个 。
8. key_len查询用到的索引长度(字节数) 。如果是单列索引,那就整个索引长度算进去,如果是多列索引,那么查询不一定都能使用到所有的列,用多少算多少 。留意下这个列的值,算一下你的多列索引总长度就知道有没有使用到所有的列了 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: