Day7(2010-08-30)(索引和查看查询性能)

对于大型的数据表,对经常搜索的内容创建索引将改善查询的速度,创建索引需要
使用CREATE INDEX语句,使用EXPLAIN SELECT语句可以显示查询的方式。对于
book表单:
+----+-----------------+--------+-------+
| ID | title           | author | pages |
+----+-----------------+--------+-------+
|  1 | The Green Mile  |      4 |   894 |
|  2 | Guards, Guards! |      2 |   302 |
|  3 | Imazdi          |      3 |   354 |
|  4 | Gold            |      1 |   405 |
|  5 | Howling Mad     |      3 |   294 |
|  6 | Freedom         |   NULL |   230 |
+----+-----------------+--------+-------+
我们可能经常需要对author进行查询,再未创建索引前,使用EXPLAIN SELECT查看查询方式:
EXPLAIN SELECT title FROM book WHERE author = 3;
结果为:
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | book  | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
table表示查询的表单名,其中type表明查询的方式,possible_keys表示可能用到的索引,key列出MySQL实际使用
的索引,没有为NULL,key_len列出所选索引按字节计算的长度。ref列出用于从表中选择行的列或常数。
rows列出了MySQL要在表中进行检查以执行查询的行数。Extra列出有关如何查询的更多信息。
type=ALL表示搜索了整个表单。rows表示要在表中检查以执行查询的行数。这里为6行,即整个表。
对author创建索引:
CREATE INDEX author_idx ON book(author);
再次执行上面的EXPLAIN SELECT语句:
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key        | key_len | ref | rows | Extra       |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
|  1 | SIMPLE      | book  | ref  | author_idx    | author_idx | 5       | const |    2 | Using where |
+----+-------------+-------+------+---------------+------------+---------+-------+------+-------------+
可以看到type已经变成了ref类型了,ref表示对于表中任意行的组合,将从该表中读取所有匹配的行。
这用于索引既不是UNIQUE也不是PRIMARY KEY的情况,或者查询中使用了左子集(即索引中左边的部分列)。
rows已经是2了,只对匹配的2行执行了查询。有了索引就不需要逐行比较了。
对于大型表单,如果行数很多且几个表同时查询的话,使用索引将大大提高查询的速度。
在查询中可以选择使用索引或者不使用:USE INDEX/IGNORE INDEX;
EXPALIN SELECT title FROM book IGNORE INDEX(author_idx) WHERE author = 3;
这个语句将不使用author_idx索引。结果需要查询整个表单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岛上码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值