易截截图软件、单文件、免安装、纯绿色、仅160KB

如何写出高性能的MySQL查询

想写这样一篇文章很久了,但始终没有下手。最近帮同事看了几个查询,而且自己也在考虑一个索引系统的问题,所以今天就把这个写了。介绍一下MySQL的索引机制,还有一些MySQL查询的优化策略。鄙人才疏学浅,很可能说的不对,请路过的各位大侠批评指正,献丑了。
------------------- jiajun.org 官方分割线 ---------------------
首先,说说MySQL的索引存储方式。MySQL的索引一般是B-Tree的结构存储的,内存表也有Hash索引,但是内存表的出镜率似乎已经低到了用“可怜”来形容的程度,所以我们只考虑B-Tree索引。
然后说说MySQL的联合索引。联合索引对于一个DBMS总是非常重要的,因为每一条SQL语句的条件子句是单条件的可能性很小,大多数情况下为组合条件,因此对于组合索引的依赖也就很强。MySQL对于联合索引的创建规则通过一个例子说明:
对于一个在列:col_a, col_b和col_c上的联合索引,MySQL会建立
INDEX(col_a), INDEX(col_a, col_b)和INDEX(col_a, col_b, col_c)
这样三个索引。
介绍完一些基本原理,我们来看MySQL对于索引的选取规则和索引的建立原则(这些规则都是个人总结的,多来源于互联网,也有自己的经验)。
对于单个索引,一般来说MySQL的查询优化器总能在若干查询条件中选取效率较高的一个使用,所以不必投入太多精力,一般来说查询容易出现的问题容易出现在联合索引。这里以一个两列的索引为例,说明一些问题。
例如:
idx_a_b (col_a, col_b)
建立做和索引的列进行or组合不可使用索引
例如:有条件
col_a = val_a OR col_b = val_b
这个条件,是不可以使用idx_a_b索引的。然而同样的查询对于却可以使用这样的索引idx_a(col_a)或者idx_b(col_b)的,因此在建立索引的时候就要考虑到出镜率最高的条件是什么,建立怎样的索引。而如果同时存在idx_a和idx_b两个索引的话,MySQL也只会选择一个使用,尽可能使用索引把结果集缩小,再在这个结果集中遍历,使用其他条件筛选。
联合索引对非前缀列不生效
例如:条件col_b = val_b这个条件是不会使用这个索引的,因为索引idx_a_b的前缀列是col_a。因此在建索引的时候,就要注意到,是否有很多使用这种条件的查询,需要为col_b单独建立索引。
对于组合索引,遇到范围查询则放弃使用剩余部分
例如:条件
col_a = val_a AND col_b = val_b
是可以使用整个索引,而对于
col_a BETWEEN val_a_left AND val_a_right AND col_b = val_b
这个条件,只会使用索引的col_


相关文档:

MySQL服务器启动、停止及连接命令

MySQL服务器启动命令如下:net start mysql
MySQL服务器停止命令如下:net stop mysql
MySQL服务器的连接命令如下:
方式一:mysql -h 主机名 -u 用户名 -p 用户密码
方式二:mysql --host=主机名 --user=用户名 --password=用户密码
默认的主机是:localhost ......

连接MySQL数据库时出现#1251错误的解决方法

连接MySQL数据库时常会出现如下的错误提示:
#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client
出现这种问题是在MySQL4.1以上版本,原因MySQL服务器版本使用了新的密码验证机制,其解决方法如下:
mysql>;set password for '用户名' @ '主机名' = old ......

在Linux环境下单机上实现MySQL5主从数据库同步复制

1.安装MySQL(略)
2.启动多个MySQL服务器
    要实现在单机上启动多个MySQL服务器,有两种方法,一种是直接使用mysqld_safe来运行多个服务器
当然这样分别编辑配置文件,而且关闭服务器的时候也要读取配置文件,所以比较麻烦,另一种方法是使用
MySQL提供到工具mysqld_multi脚本来管理多个服务器,下面 ......

mysql提示的23个注意事项

      1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就需要使用SSH隧道来加密该连接的通信。
  2.用set password语句来修改用户的密码,三个步骤,先“mysql -u root”登陆数据库系统,然后“mysql> update mysql.user s ......

用Mysql GUI tool 链接 Mysql 错误 2003 的解决办法

今天在Ubuntu下安装了mysql server, 然后试图在winxp下面用Mysql GUI tool链接,结果总是失败,显示错误号为2003.
下面是探索过程:
1.首先怀疑是Ubuntu下面有防火墙, 在winxp下面ping可以ping通, Ubuntu下面执行 "ufw status" 显示也是inactive的;
说明和防火墙没有关系。
2. 怀疑mysql 没有起来, 在Ubuntu下面执 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号