高性能MySQL学习笔记(二)
前缀索引
(1)如果以多个字段作为索引(a,b,c)作为一个key,在查询时分根据匹配情况是否使用索引,所以,a/ a,b/ a,b,c这样的查询都能使用到,但是b,a/a,c/c,a等不符知前缀匹配就不能使用,所以在写sql时需要注意
(2)对于很长的字符串需要生成key时,可以找出最常使用的字符串的最常见前缀(前N个字条作为key,而不是将全个字符串作为key),这样一方面牺牲少少的精确性(有多余数据,再过滤),另一方面大大提高了检索效率,同时减少了索引的维护开销(存储空间,更新等)
如有200w的url,统计结果如下:
select count(*) as cnt, url from iUrl group by url order by cnt desc limit 10;
+-----+-------------------+
| cnt | url |
+-----+-------------------+
| 380 | http://www.f.com, |
| 354 | http://www.r.com, |
| 340 | http://www.h.com, |
| 336 | http://www.u.com, |
| 336 | http://www.e.com, |
| 336 | http://www.i.com, |
| 332 | http://www.k.com, |
| 330 | http://www.t.com, |
| 330 | http://www.w.com, |
| 326 | http://www.l.com, |
+-----+-------------------+
10 rows in set (3.04 sec)
取前N个字符作为前缀,使得匹配效果与全统计接近为止(这里由于都是以http://www. 开头,所以看不出效果)
select count(*) as cnt, left(url,11) from iUrl group by url order by cnt desc limit 10; --left(url,11) 取字符串的左N个
也可以通过计算全列选择性,详细方法要细看书了
添加前缀索引
alter table iUrl add key ( url(11) );
前缀索引好处是:1.减少索引大小 2.提高速度,但也有不足:不能用于order by/group by, 不能作为覆盖索引
聚集索引
不是一种单独的索引,而是一种存储方式。InnoDB支持,保存了B-Tree和数据行,它将数据行保存在索引的叶子页中。每个表只有一个聚集索引。InnoDB按主键进行聚集。
聚集索引优点:
1.可能把相关数据保存在一起
2.数据访问快
3.结全覆盖索引查询可以使用包含叶子节点中的主键值
缺点:
1.聚集能最大限度提升I/O密集负载的性能,但如果数据能装入内存,顺序就无所谓了,这样聚集就没有什么用处了
2.插入速度严重依赖于插入顺序(按主键顺序插入是最快的)
3.更新聚集索引开销大
4.插入、更新时可能会发生分页,导致更多的磁盘空间
5.
相关文档:
今天使用PowerDesigner搭建了一个小项目,最后执行完SQL脚本时才发现有2张表的表名中间多了一个空格,查完资料,最后并惊奇发现映射文件竟然多了2个`,就是shift+数字键1的那个,也就是他在脚本是这样写的:
create table `table1`(....);
问题解决。
PS:从网上找到的资料:
作为一个Oracle DBA,MySQL很多SQL语法与Orac ......
关于MySql的导入导出问题
在终端中,进入mysql的路径下的bin中,在这个路径下可以执行mysql,mysqldump等命令。
或者添加环境变量 设置环境变量path "...(mysql的安装路径下的bin目录)",这样就不必每次都进入上面所说的路径下操作。
导出一个库:
mysqldump ......
安装配置mysql
http://edu.codepub.com/2009/1213/18710.php
一、
下载编译安装
#cd /usr/local/src/
#wget http://mysql.byungsoo.net/Downloads/MySQL-5.1/mysql-5.1.38.tar.gz
#tar –xzvf mysql-5.1.38.tar.gz ../software/
#./configure
--prefix=/usr/local/mysql //MySQL安装目录
--datadir=/mydata / ......
MySQL密码修改方法
首先要声明一点,大部分情况下,修改MySQL是需要有mysql里的root权限的,所以一般用户无法更改密码,除非请求管理员。
方法一
使用phpmyadmin,这是最简单的了,修改mysql库的user表,
不过别忘了使用PASSWORD函数。
方法二
......
优化MySQL数据库查询
在优化查询中,数据库应用(如MySQL)即意味着对工具的操作与使用。使用索引、使用EXPLAIN分析查询以及调整MySQL的内部配置可达到优化查询的目的
任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的 ......