高性能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.
相关文档:
1、下载MySQL的Linux安装文件
Linux下安装MySQL需要下面两个文件:
MySQL-server-5.1.7-0.i386.rpm
下载地址为:http://dev.mysql.com/downloads/mysql/5.1.html,打开此网页,下拉网页找到“Linux x86 generic RPM (statically linked against glibc 2.2.5) downloads”项,找到“Ser ......
昨天要mysql中写存储过程发现网上有关于cursor循环且套的资料很少,现发出本人写的例子,希望能对大家有帮助.
看招:
DELIMITER $$
USE `ad_db`$$
DROP PROCEDURE IF EXISTS `test`$$
CREATE DEFINER=`root`@`%` PROCEDURE `test`()
BEGIN
/** CPA效果数 */
DECLARE _tmpId1 INT;
DECLARE ......
关于MySql的导入导出问题
在终端中,进入mysql的路径下的bin中,在这个路径下可以执行mysql,mysqldump等命令。
或者添加环境变量 设置环境变量path "...(mysql的安装路径下的bin目录)",这样就不必每次都进入上面所说的路径下操作。
导出一个库:
mysqldump ......
1005:MYSQL创建表失败
1006:MYSQL创建数据库失败
1007:MYSQL数据库已存在,创建数据库失败
1008:MYSQL数据库不存在,删除数据库失败
1009:MYSQL不能删除数据库文件导致删除数据库失败
1010:MYSQL不能删除数据目录导致删除数据库失败
&nbs ......
MySQL数据库root权限丢失解决方案
一天不小心把ROOT的权限改到最小了(只能登录,什么都做不了),这可急死我了.重装的话太麻烦,而且里面有很多的用户,一个个重新弄不知道到什么时候。
后来我想了一个办法,先把当前服务器的MySQL服务停止,把MySQL DATa目录下的mysql目录改名为mysql_OLD,到另一个服务器下把mysql目录下的/ ......