免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3018 | 回复: 4
打印 上一主题 下一主题

mysql手册的疑问:key_part和key有什么区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-04 18:40 |只看该作者 |倒序浏览
20可用积分
(万恶的论坛代码,竟然自动刷新,害我白打那么多字了)
以下是手册优化部分中的一段:

即使ORDER BY不确切匹配索引,只要WHERE子句中的所有未使用的索引部分和所有额外的ORDER BY 列为常数,就可以使用索引。下面的查询使用索引来解决ORDER BY部分:

SELECT * FROM t1

    ORDER BY key_part1,key_part2,... ;

在某些情况下,MySQL不能使用索引来解决ORDER BY,尽管它仍然使用索引来找到匹配WHERE子句的行。这些情况包括:

·         对不同的关键字使用ORDER BY:

·                SELECT * FROM t1 ORDER BY key1, key2;

这里两者有什么区别?

最佳答案

查看完整内容

第一个问题不用再答了,我来回答第二个问题。原因是由于在查询中要求取索引以外的字段,导致filesortEXPLAIN这个试试:SELECT id from content_2 ORDER BY id;所以要好好合理利用复合索引噢。

论坛徽章:
0
2 [报告]
发表于 2008-03-04 18:40 |只看该作者

回复 #2 oyd_admin 的帖子

第一个问题不用再答了,我来回答第二个问题。
原因是由于在查询中要求取索引以外的字段,导致filesort
EXPLAIN这个试试:
SELECT id from content_2 ORDER BY id;
所以要好好合理利用复合索引噢。

论坛徽章:
0
3 [报告]
发表于 2008-03-04 18:43 |只看该作者
手册中的一句:
通过EXPLAIN SELECT ...ORDER BY,可以检查MySQL是否可以使用索引来解决查询。如果Extra列内有Using filesort,则不能解决查询。

---------------------------------------------------------

我贴一下我的表结构:
mysql> desc content_2;
+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| id           | int(10) unsigned |      | PRI | NULL    | auto_increment |
| game_id      | int(10) unsigned |      |     | 0       |                |
| attribute_id | int(10) unsigned |      | MUL | 0       |                |
| info_id      | int(10) unsigned |      | MUL | 0       |                |
| detail       | text             |      |     |         |                |
+--------------+------------------+------+-----+---------+----------------+

为什么这里我用主键也无法做到不出现"Using filesort"呢?
mysql> EXPLAIN SELECT * from content_2 ORDER BY id;  
+-----------+------+---------------+------+---------+------+-------+----------------+
| table     | type | possible_keys | key  | key_len | ref  | rows  | Extra          |
+-----------+------+---------------+------+---------+------+-------+----------------+
| content_2 | ALL  | NULL          | NULL |    NULL | NULL | 39363 | Using filesort |
+-----------+------+---------------+------+---------+------+-------+----------------+

请问我这种情况下要如何才能解决查询?

论坛徽章:
0
4 [报告]
发表于 2008-03-04 20:38 |只看该作者
key_part1,key_part2应该是同一个复合索引的两个部分。例如index(cloumn1,column2),
然后order by column1,column2;
至于第二个,只要是order by都会filesort——记得是这样子的。你可以加个limit 试试,可能会多个where,

论坛徽章:
0
5 [报告]
发表于 2008-03-05 11:28 |只看该作者
基本上大多数ORDER BY都用不到索引的。

所以加大
SORT用的内存。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP