当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 解决MySQL数据库中与优化器有关的问题

MYSQL
MySQL字段类型详解
MySQL安全问题的一点心得
Linux下通过C++语言代码来操作MySQL数据库
Mysql常用命令行大全
保护MySQL数据库中重要数据的注意事项
Jsp连接Mysql数据库:利用Servlet监听器
提高MySQL数据库查询效率的几个技巧
精细分析 SQL server服务器的内存配置
如何选择合适的MySQL存储引擎
如何对MySQL数据库日志文件进行维护
如何进行MySQL数据库表的故障检测
如何对MySQL数据库表进行锁定
Navicat for MySQL 与 MySQL-Front比较
DBA经验:如何进行MySQL数据库表的故障检测
小谈MySQL字符集
mysql数据库下损坏数据的恢复操作其过程总结
MySQL如何查询当前正在运行的SQL语句
MySQL数据库的临时文件究竟储存在哪里
用MySQL内建复制功能来优化可用性
使用ODBC接口访问MySQL

MYSQL 中的 解决MySQL数据库中与优化器有关的问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 55 ::
收藏到网摘: n/a

MySQL采用了基于开销的优化器,以确定处理查询的最解方式。在很多情况下,MySQL能够计算最佳的可能查询计划,但在某些情况下,MySQL没有关于数据的足够信息,不得不就数据进行“有教养”的估测。

当MySQL未能做“正确的”事时,可使用下述工具来帮助MySQL:

使用EXPLAIN语句获取关于MySQL如何处理查询的信息。要想使用它,可在SELECT语句前添加关键字EXPLAIN:

mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
 
使用ANALYZE TABLE tbl_name,为已扫描的表更新键分配。

为已扫描的表使用FORCE INDEX,通知MySQL:与使用给定的索引相比,表扫描开销昂贵。

SELECT * FROM t1, t2 FORCE INDEX (index_for_column)
WHERE t1.col_name=t2.col_name;
 
USE INDEX和IGNORE INDEX也有一定的帮助。

你可以调节全局或线程类系统变量。例如,用“--max-seeks-for-key=1000”选项启动mysqld,或使用“SET max_seeks_for_key=1000”来通知优化器:假定任何表扫描均不会导致1000个以上的键搜索。