• 创建:2006-8-22
  • 文章:79
  • 评论:79
  • 访问:111538
  •  
MySQL索引分析和优化解决方案
 
作者:45itcom收…   文章出处:电脑软硬件应用网   更新时间:2006-9-20
一、什么是索引?

  索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

  假设我们创建了一个名为people的表:

CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );

  然后,我们完全随机把10……
        编辑 | 阅读全文(85) | 回复(0),泉水 发表于 2008-6-24 13:29
        关键字:管理和优化
        mysql优化
        最大连接数的修改:  

        方法一:
               进入MYSQL安装目录 打开MYSQL配置文件 my.ini
               查找 max_connections=100  修改为 max_connections=1000 服务里重起       MYSQL即可

        方法二:
               MySQL的最大连接数默认是100

               客户端登录:mysql -uusername -ppassword
             &……
        编辑 | 阅读全文(110) | 回复(0),泉水 发表于 2008-6-23 15:20

        2008-6-20 11:48 | [转帖]MySQL参数说明

        关键字:MySQL参数

        MySQL参数说明

        Wikipedia,自由的百科全书

        原文地址:http://sunsite.mff.cuni.cz/MIRRORS/ftp.mysql.com/doc/en/SHOW_VARIABLES.html
        1. back_log
        指定MySQL可能的连接数量。当MySQL主线程在很短的时间内得到非常多的连接请求,该参数就起作用,之后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
        back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。
        当观察MySQL进程列表,发现大量 264084 | unauthenticated ……
        编辑 | 阅读全文(143) | 回复(0),泉水 发表于 2008-6-20 11:48
        将mysql编译成静态执行文件而无需共享库可以提高性能
        #./configure --with-mysqld-ldflags=-all-static [--other-configuration-options]
        编辑 | 阅读全文(122) | 回复(0),泉水 发表于 2008-5-14 16:37
        http://www.yangwenjun.com/article.asp?id=27
        这个脚本是使用Perl生成excel xls文件的工具。依赖一些模块,你可以在linux下使用,产生xls文件。使用方式是命令行+参数。非常方便。
        #!/usr/bin/perl

        #===============================
        # mysql to excel
        # lastmodify at 2005-1-5
        # copyright by hoowa
        #=============================
        use strict; #严格语法检测
        use DBI; #数据库引擎
        use Unicode::Map; #Unicode引擎
        #use Spreadsheet::WriteExcel; #Excel报表引擎
        use Spreadsheet::WriteExcel::Big; #大文件……
        编辑 | 阅读全文(115) | 回复(0),泉水 发表于 2008-5-14 16:35

        2008-5-14 16:32 | [推荐]MySQL二进制日志

        MySQL二进制日志是以事务安全的方式包含更新日志中可用的所有信息。它包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句。语句以“事件”的形式保存,它描述数据更改。
        运行服务器时若启用二进制日志则性能大约慢1%。但是,二进制日志的好处,即用于恢复并允许设置复制超过了这个小小的性能损失。
        mysqld选项来控制二进制日志
        --binlog-do-db=db_name
        db_name更新记录到二进制日志中
        --binlog-ignore-db=db_name
        不将db_name更新保存到二进制日志中
        MySQL二进制日志占据硬盘空间。要想释放空间,应随时清空。操作方法是删掉不再使用的二进制日志,例如进行完全备份时:
        shell> mysqldump --single-transaction --flush-logs --master……
        编辑 | 阅读全文(248) | 回复(0),泉水 发表于 2008-5-14 16:32
        服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用mysqlbinlog实用工具。
        应这样调用mysqlbinlog
        shell> mysqlbinlog [options] log-files...
        例如,要想显示二进制日志binlog.000003的内容,使用下面的命令:
        shell> mysqlbinlog binlog.0000003
        输出包括在binlog.000003中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程ID、发出线程时的时间戳等等。
        通常情况,可以使用mysqlbinlog直接读取二进制日志文件并将它们用于本地MySQL服务器。也可以使用--read-from-remote-server选项从远程服务器读取二进制日志。
        当读取远程二进制日志时,可以通过连接参数选项来指示如何连接服务器,但它们经常被忽略掉,除非你还指定了-……
        编辑 | 阅读全文(263) | 回复(0),泉水 发表于 2008-5-14 16:30
        mysqlcheck客户端可以检查和修复MyISAM表。它还可以优化和分析表。
        mysqlcheck的功能类似myisamchk,但其工作不同。主要差别是当mysqld服务器在运行时必须使用mysqlcheck,而myisamchk应用于服务器没有运行时。使用mysqlcheck好处是不需要停止服务器来检查或修复表。
        Mysqlcheck为用户提供了一种方便的使用SQL语句CHECK TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE的方式。它确定在要执行的操作中使用使用哪个语句,然后将语句发送到要执行的服务器上。
        3种方式来调用mysqlcheck
        shell> mysqlcheck[options] db_name [tables]
        shell> mysqlcheck[options] ---database DB1 [DB2 DB3……

        编辑 | 阅读全文(330) | 回复(0),泉水 发表于 2008-5-14 16:28
        mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。转储包含创建表和/或装载表的SQL语句。
        如果你在服务器上进行备份,并且表均为MyISAM表,应考虑使用mysqlhotcopy,因为可以更快地进行备份和恢复。参见8.9节,“mysqlhotcopy:数据库备份程序”
        3种方式来调用mysqldump
        shell> mysqldump [options] db_name [tables]
        shell> mysqldump [options] ---database DB1 [DB2 DB3...]
        shell> mysqldump [options] --all--database
        如果没有指定任何表或使用了---database--all--database选项,则转储整个数……
        编辑 | 阅读全文(152) | 回复(0),泉水 发表于 2008-5-14 16:26

        2008-5-14 16:24 | [推荐]MySQL 锁定方法

        关键字:MySQL 锁定方法
        MySQL 5.1支持对MyISAMMEMORY表进行表级锁定,对BDB表进行页级锁定,对InnoDB表进行行级锁定。
        在许多情况下,可以根据培训猜测应用程序使用哪类锁定类型最好,但一般很难说出某个给出的锁类型就比另一个好。一切取决于应用程序,应用程序的不同部分可能需要不同的锁类型。
        为了确定是否想要使用行级锁定的存储引擎,应看看应用程序做什么并且混合使用什么样的选择和更新语句。例如,大多数Web应用程序执行许多选择,而很少进行删除,只对关键字的值进行更新,并且只插入少量具体的表。基本MySQL MyISAM设置已经调节得很好。
        MySQL中对于使用表级锁定的存储引擎,表锁定时不会死锁的。这通过总是在一个查询开始时立即请求所有必要的锁定并且总是以同样的顺序锁定表来管理。
        WRITEMySQL使用的表锁定方法原理如下:
        • 如果在表上没有锁,在它上面放一个写锁。
        • 否则,把锁定请求放在写锁定队列中。
        ……
          编辑 | 阅读全文(264) | 回复(0),泉水 发表于 2008-5-14 16:24
          1.利用MySQL自身的数据库同步功能
          MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能. 数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf)
          mysql:4.0.4-beta-max-nt-log
          Aip:10.0.0.200
          Bip:10.0.0.150
          A:设置
          1.增加一个用户最为同步的用户帐号:
          GRANTFILEON*.*TObackup@'10.0.0.150'IDENTIFIEDBY‘1234’
          2.增加一个数据库作为同步数据库:
          createdatabasebackup
          B:设置
          1.增加一个用户最为同步的用户帐号:
          GRANTFILEON*.*TObackup@'10.0.0.200'IDENTIFIEDBY‘1234’
          2.增加一个……
          编辑 | 阅读全文(111) | 回复(0),泉水 发表于 2008-5-14 16:23

          2008-5-14 16:22 | [推荐]MySQL 导入/出

          关键字:MySQL 导入/出
          1.导入数据库   常用source 命令
            进入mysql数据库控制台,
            如mysql -u atyu -p
            mysql>use 数据库
            然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
            mysql>source /data/atyu30_db.sql

          2.导出整个数据库   mysqldump -u 用户名 -p 数据库名 > 导出的文件名
            mysqldump -u atyu -p atyu_bbs > atyu_bbs.back.sql
          3.导出一个表
            mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
            mysqldump -u atyu -p bbs users> atyu_users.sql
          4.导出一个数据库结构
            mysqldump -u atyu -p -d --add-drop-table……
          编辑 | 阅读全文(62) | 回复(0),泉水 发表于 2008-5-14 16:22

          2008-5-14 16:21 | [推荐]MYSQL 排错

          关键字:MYSQL 排错
          进入数据库:
          # mysql -h localhost -u -root -p

          如果连root都进不去了。。。。。
          可以通过加
          --skip-grant-tables
          重启数据库
          REDHAT


          也可以在 /etc/my.cnf 中 在server部分加上 skip-grant-tables 也可以!!

          FreeBSD系統: /usr/local/libexec/mysqld --skip-grant-tables &

          以root进入MYSQL后会看到如下画面……
          编辑 | 阅读全文(72) | 回复(0),泉水 发表于 2008-5-14 16:21
          在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
          mysql_query("SET NAMES 'GBK'");
          编辑 | 阅读全文(85) | 回复(0),泉水 发表于 2008-5-14 16:11
          建立MySQL的SSL连接通道
          通常我们在编译MySQL的时候都加入了with-openssl选项,但这并不代表MySQL已经支持了OpenSSL连接,我们可以通过如下命令进行检测:
          SHOW VARIABLES LIKE 'have_openssl';
          如果显示DISABLED则表明MySQL尚不支持OpenSSL。
          1. 建立SSL证书
            ;;建几个目录和文件
            mkdir /usr/local/myssl
            cd /usr/local/myssl
            mkdir private newcerts
            touch index.txt
            echo "01" > serial
            ;;拷贝一份OpenSSL的缺省配置到当前目录
            cp /usr/local/openssl/openssl.cnf .
            ;;修改当前目录下的openssl.cnf,将./demoCA替换为/usr/local/myssl,repl……
          编辑 | 阅读全文(69) | 回复(0),泉水 发表于 2008-5-14 16:10
          (共 23 条) 上一页 1 2

          仅列出标题