如何明确建立索引

ASDFGHJKL987 2009-05-08 03:27:52
想请教一下大家,如果我建了索引,发现实际情况并没有用到,如果能明确指定一个索引呢?
另外我用explain去分析查询语句,怎么根据这个结果去调整呢?
...全文
45 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2009-05-08
  • 打赏
  • 举报
回复

---这句话的意思是不是使用强制索引要比不使用时熬时更多啊?

这个中文的理解是这样。(MySQL的中文帮助翻译得很差,建议中英文一起看)
Use FORCE INDEX for the scanned table to tell MySQL that table scans are very expensive compared to using the given index:

用FORCE INDEX 告诉MySQL全表描扫比我给你的索引更耗资源。(我翻得也不怎么样。)



ACMAIN_CHM 2009-05-08
  • 打赏
  • 举报
回复

什么时候用什么索引速度能更快呢?怎么判断一个表的索引建立的合不合适呢

表比较大的时候,索引上的势也比较大(值比较分散,比如你1000000记录,按男女建索引显示效率没什么大影响)。 根据你的查询可以判断你的索引是否合适,看explian的结果了。
ASDFGHJKL987 2009-05-08
  • 打赏
  • 举报
回复
对扫描的表使用FORCE INDEX告知MySQL,相对于使用给定的索引表扫描将非常耗时
---这句话的意思是不是使用强制索引要比不使用时熬时更多啊?
WWWWA 2009-05-08
  • 打赏
  • 举报
回复
根据你的SQL语句来判断,一般来讲,在连接字段上建立索引,你的问题太大,
举个具体例子吧
ASDFGHJKL987 2009-05-08
  • 打赏
  • 举报
回复
还能问下您,如果根据EXPLAIN的结果去优化呢,比如TYPE类型为ALL
,它的效率肯定不好,什么时候用什么索引速度能更快呢?怎么判断一个表的索引建立的合不合适呢
WWWWA 2009-05-08
  • 打赏
  • 举报
回复
SELECT * FROM TABLE1 USE INDEX (FIELD1, FIELD2) …
or
SELECT * FROM TABLE1 FORCE INDEX (FIELD1)
ACMAIN_CHM 2009-05-08
  • 打赏
  • 举报
回复

一般来说,MySQL应该按规则找到最佳的执行方案,不需要你去调整。
如果有问题可以先analyze table来重新生成一下统计分析结果。

如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。参见13.2.7节,“SELECT语法”。

尝试下面的技巧以避免优化器错选了表扫描:

· 使用ANALYZE TABLE tbl_name为扫描的表更新关键字分布。参见13.5.2.1节,“ANALYZE TABLE语法”。
· 对扫描的表使用FORCE INDEX告知MySQL,相对于使用给定的索引表扫描将非常耗时。参见13.2.7节,“SELECT语法”。
· SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
· WHERE t1.col_name=t2.col_name;


http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#how-to-avoid-table-scan
7.2.15. 如何避免表扫描

WWWWA 2009-05-08
  • 打赏
  • 举报
回复
要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧