mysql优化笔记
mysql 笔记_02_2013_05_24
mysql笔记更新至2012-6-151.如何查看数据表先要选择数据库:use judge然后查看该数据库中有哪些表:show tables查看表的结构:desc student说明:judge是数据库;student是表名。
2.表2.1.查询表mysql中如何查询rownum呢?mysql>set@mycnt=0;Query OK,0rows affected(0.00sec)mysql>select(@mycnt:=@mycnt+1)as ROWNUM,description from question;2.1.1.获取记录的条数st();connections=rs.getRow();2.2.创建表2.2.1.创建自增列:create table student(id int primary key auto_increment,name char(20));注意:自增列必须被定义成一个键(主键或者外键)2.3.删除表drop table student;2.4.修改表2.4.1.增加列alter table pass add column issuperpwd bit(1);2.4.2.删除列alter table student drop column name;2.4.3.修改列的类型alter table student change column name name bit(1);alter table student modify column name bit(2);注意:以上两种方法都可以。
2.4.4.修改列名称修改列的名称alter table student change column name name33char(5);2.4.5.修改表名alter table A rename to B;mysql>alter table A rename to B;Query OK,0rows affected(0.00sec)2.5.约束2.5.1.增加主键alter table student add primary key(id);2.5.2.删除主键alter table student drop primary key;2.5.3.设置自增列alter table student modify column id int auto_increment; mysql>alter table student modify column id int auto_increment; Query OK,0rows affected(0.00sec)Records:0Duplicates:0Warnings:0mysql>desc student;+-------+----------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+-------+----------+------+-----+---------+----------------+|id|int(11)|NO|PRI|NULL|auto_increment||name|char(20)|YES||NULL||+-------+----------+------+-----+---------+----------------+2rows in set(0.00sec)2.5.4.去掉自增列alter table student modify column id int;3.备份与还原3.1.备份恢复数据mysqldump-uroot-proot-w"id=2"books book>d:12.sql数据库books中有一个表bookmysqldump-uroot-proot huangwei pass>e:/test/pass.sql说明:huangwei是数据库名,数据库huangwei中有一个表pass mysqldump-uroot-proot-w id=2or id=3books book>d:12.sql备份整个数据库:mysqldump-uroot--password=root--database huangwei>e:/test/huangwei.sql仅备份数据:mysqldump-uroot-proot-t huangwei Question>e:/smb/question.sql说明:-n:不包含数据库的创建语句-t:不包含数据表的创建语句-d:不包含数据3.2.还原执行脚本\./home/whuang/pass.sqlsource d:123\12.sqlsource d:\download\pass_02.sqlmysql-uroot-proot<e:/test/huangwei.sql说明:执行上述命令时,不需要登录数据库4.数据库编码4.1.查看编码show variables like'character\_set\_%';正确的编码是+--------------------------+--------+|Variable_name|Value|+--------------------------+--------+|character_set_client|gbk||character_set_connection|gbk||character_set_database|utf8||character_set_filesystem|binary||character_set_results|gbk||character_set_server|utf8||character_set_system|utf8|+--------------------------+--------+错误的编码是:+--------------------------+--------+|Variable_name|Value|+--------------------------+--------+|character_set_client|gbk||character_set_connection|gbk||character_set_database|latin1||character_set_filesystem|binary||character_set_results|gbk||character_set_server|latin1||character_set_system|utf8|+--------------------------+--------+4.2.设置编码正确default-character-set=utf8错误default-character-set=utf-85.配置5.1.配置文件windows中的配置文件名称是my.inilinux中的配置文件名称是/etc/f配置文件如下:(vim/etc/f)[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql#Default to using old password format for compatibility with mysql3.x#clients(those using the mysqlclient10compatibility package).old_passwords=1#added by huangweidefault-character-set=utf8#Disabling symbolic-links is recommended to prevent assorted security risks; #to do so,uncomment this line:#symbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid#added by huangwei[mysql]default-character-set=gbkwindows下的配置文件C:\Program Files\MySQL\MySQL Server5.1\my.ini5.1.1.设置自动提交set autocommit=1或set autocommit=on开启自动提交set autocommit=0或set autocommit=off禁止自动提交5.1.2.查看是否是自动提交查看自动提交show variables like'autocommit';select@@autocommit;执行set autocommit=0;完之后再查看:在mysql中设置set autocommit=0后,执行完SQL语句之后,并没有自动提交。
mysqlisnull函数_MySQL优化准则和技巧
mysqlisnull函数_MySQL优化准则和技巧MySQL是一种常用的关系型数据库管理系统,它广泛应用于各种Web应用程序和大型企业级系统。
为了提高MySQL数据库的性能和效率,我们可以通过一些优化准则和技巧来优化它的性能。
下面是一些MySQL优化准则和技巧,帮助您提高MySQL数据库的性能和效率。
1.使用合适的数据类型:选择合适的数据类型可以减少存储空间的占用和提高查询效率。
例如,对于存储整数的列,可以使用INT而不是VARCHAR,因为INT类型使用的存储空间更小。
2.创建适当的索引:索引可以加快查询的速度,特别是对于大型表来说。
在选择索引时,应该选择那些经常用于过滤和排序的列。
另外,避免创建过多的索引,因为过多的索引会增加写操作的负担。
3.避免使用SELECT*:尽量避免使用SELECT*语句,因为它会返回所有列的数据,包括不需要的列。
这会增加网络传输的开销和查询的执行时间。
最好只选择需要的列。
4.使用LIMIT分页:对于需要分页的查询,使用LIMIT语句可以提高查询的效率。
LIMIT语句可以限制查询结果的返回行数,减少数据库返回的数据量。
5.使用连接池:连接池可以提高数据库的连接效率。
连接池会维护一组已经建立的数据库连接,这样可以避免每次请求都重新建立连接的开销。
6.避免使用子查询:子查询可能会导致性能问题,特别是在处理大量数据时。
如果可能的话,尽量使用JOIN操作来代替子查询。
7.使用批量插入:当需要插入大量数据时,使用批量插入可以提高插入的效率。
批量插入可以减少与数据库的交互次数,从而提高插入的速度。
8.避免使用SELECTDISTINCT:SELECTDISTINCT语句可以去除查询结果中的重复行,但它会增加查询的开销。
如果不是必要的话,尽量避免使用SELECTDISTINCT。
9.避免在查询中使用函数:在查询中使用函数可以增加查询的开销。
如果可能的话,尽量避免在查询中使用函数。
MySQL数据库中写入性能优化的方法与技巧
MySQL数据库中写入性能优化的方法与技巧一、简介MySQL是一种常用的关系型数据库管理系统,被广泛应用于各种大型应用中。
而对于很多应用程序来说,数据库的写入性能至关重要。
本文将介绍一些优化MySQL数据库写入性能的方法与技巧。
二、选择合适的存储引擎MySQL提供了多个存储引擎,如InnoDB、MyISAM等。
每个存储引擎都有其特点和适用场景。
在写入密集型的场景下,InnoDB存储引擎通常表现更好。
因为它支持行级锁和事务,可以提供更好的并发性能和数据的一致性。
而对于读多写少的场景,MyISAM存储引擎可能会更适合。
三、使用批量操作在插入大量数据时,采用批量操作比逐条插入更高效。
可以使用LOAD DATA INFILE语句导入CSV或TXT格式的文件,或者使用多值插入语法INSERT INTO table (column1, column2) VALUES (value1, value2), (value1, value2)等。
这样可以减少网络开销和连接开销,提升写入性能。
四、合理设计表结构良好的表结构设计也能提升MySQL数据库的写入性能。
避免使用过多的索引和约束,因为这会增加写入操作的时间。
可以根据具体需求,选择合适的数据类型和字段大小。
此外,将常用的查询字段放在一起,可以减少硬盘I/O,提高查询效率。
五、调整缓存大小MySQL使用了多级缓存来加速查询和写入操作。
其中,InnoDB存储引擎的主要缓存是缓冲池。
通过适当地设置innodb_buffer_pool_size参数,可以调整缓冲池的大小,提升写入性能。
但是也不能设置得过大,因为这会导致内存不足,引发其他性能问题。
六、合理配置日志刷新机制MySQL使用了日志刷新来保证数据的持久性。
但是频繁的日志刷新操作会降低写入性能。
可以通过修改innodb_flush_log_at_trx_commit参数的值,将其设置为合适的数值,来平衡数据安全性和写入性能。
宋红康mysql高级篇笔记
宋红康mysql高级篇笔记MySQL 是一款广泛应用于互联网领域的关系型数据库管理系统。
它的高级功能和优势使得它成为互联网开发者的首选。
本文将分享一些关于 MySQL 高级篇的笔记,涵盖了一些互联网技术介绍、互联网商业和技术应用方面的内容。
一、索引优化索引是提高数据库查询效率的重要手段之一。
在 MySQL 中,使用合适的索引可以显著提升查询性能。
首先,我们需要了解不同类型的索引,如主键索引、唯一索引和普通索引等。
其次,根据具体应用场景,我们可以使用覆盖索引、前缀索引、联合索引等技术进行索引优化。
此外,我们还要注意索引的维护和管理,及时进行索引的重建和优化。
二、查询优化在互联网应用中,查询是最常见的数据库操作之一。
如何编写高效的查询语句,能够快速地获取所需的数据,是每个开发者都应该关注的问题。
本节将介绍一些查询优化的技巧,例如避免使用通配符查询、合理使用 LIMIT 关键字、使用 EXPLAIN 分析查询执行计划等。
三、事务管理事务是保证数据库操作一致性和完整性的重要手段。
MySQL 支持事务的 ACID 特性,可以确保多个操作的原子性、一致性、隔离性和持久性。
本节将详细介绍如何使用事务管理,包括事务的开启、提交和回滚,以及事务并发控制的方法。
四、高级数据操作除了基本的增删改查操作,MySQL 还提供了一些高级数据操作功能,方便开发者完成复杂的数据处理任务。
本节将介绍如何使用子查询、联合查询、分组查询和多表操作等技术,实现更灵活和高效的数据操作。
五、存储引擎选择MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。
不同的存储引擎具有不同的特点和适用场景。
本节将比较各种存储引擎的优缺点,并给出存储引擎选择的建议。
六、高可用性和容灾备份在互联网应用中,数据库的高可用性和容灾备份是非常重要的。
本节将介绍如何使用主从复制、读写分离、故障转移和数据备份等技术,提高数据库的稳定性和可用性。
《快速念咒:MySQL入门指南与进阶实战》笔记
《快速念咒:MySQL入门指南与进阶实战》阅读记录1. 第一章数据库基础在开始学习MySQL之前,了解一些数据库的基础知识是非常重要的。
数据库是一个用于存储和管理数据的计算机软件系统,它允许用户通过关键字或特定的查询语言来检索、更新和管理数据。
在数据库中,数据是以表格的形式进行组织的,每个表格都包含了一组相关的数据项,这些数据项被称为记录。
表(Table):表是数据库中存储数据的基本单位。
每个表都有一个唯一的名称,并由行(Row)和列(Column)组成。
每一行代表一个数据记录,每一列代表一个特定的数据属性。
字段(Field):字段是表中的一列,代表了数据的一种属性。
每个字段都有一个唯一的名称和一个数据类型,用于定义该字段可以存储的数据种类。
主键(Primary Key):主键是表中的一个特殊字段,用于唯一标识表中的每一行记录。
主键的值必须是唯一的,且不能为NULL。
外键(Foreign Key):外键是一个表中的字段,它的值引用了另一个表的主键值。
外键用于建立两个表之间的联系,确保引用完整性。
索引(Index):索引是一种数据库优化技术,用于提高查询性能。
通过创建索引,数据库可以更快地定位到表中的特定记录,而不必扫描整个表。
SQL(Structured Query Language):SQL是用于与数据库进行交互的编程语言。
它包括用于数据查询、插入、更新和删除的操作符和语法结构。
理解这些基本概念是学习MySQL的前提。
通过掌握SQL语言的基本语法和操作,你将能够有效地管理和操作数据库中的数据。
在接下来的章节中,我们将深入探讨MySQL的具体应用,包括如何创建和管理数据库、表、以及如何执行复杂的查询操作。
2. 第二章数据库设计《快速念咒:MySQL入门指南与进阶实战》是一本全面介绍MySQL 数据库的书籍,其中第二章详细阐述了数据库设计的基础知识和实践技巧。
在这一章节中,作者首先介绍了数据库设计的基本概念和目标,包括数据模型、实体关系模型(ER模型)等,并解释了如何通过这些模型来描述现实世界中的数据和业务逻辑。
(转)MySQL学习笔记-redolog和binlog两阶段提交
(转)MySQL学习笔记-redolog和binlog两阶段提交原⽂:https:///qq_38937634/article/details/113100472?utm_term=mysql%E6%97%A5%E5%BF%97%E4%B8%A4%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-2-113100472&spm=3001.4430⽂章⽬录MySQL学习笔记-redo log 和 binlog&两阶段提交1.笔记图2.⼀条更新语句是如何被执⾏的3.redo log4.binlog5.为什么要有两份⽇志?6.更新语句内部执⾏流程7.两阶段提交MySQL学习笔记-redo log 和 binlog&两阶段提交前⾯学习了⼀条查询语句的执⾏过程⼀般是经过连接器、分析器、优化器、执⾏器等功能模块,最后到达存储引擎,⽽⼀条更新语句的执⾏流程也会按照查询查询语句的流程⾛⼀遍,但更新语句会涉及到两个⽇志模块,分别是 redo log 和 binlog,这篇⽂章学习⼀下这两个⽇志的作⽤。
1.笔记图2.⼀条更新语句是如何被执⾏的连接器:负责跟客户端建⽴连接、获取权限、维持和管理连接分析器:词法分析:识别出 SQL 语句⾥⾯的字符串分别代表什么,把 SQL 语句中字符串 T 识别成“表名 T,把字符串 ID 识别成列 ID语法分析:根据词法分析的结果,语法分析器会根据语法规则,判断你输⼊的这个 SQL 语句是否满⾜ MySQL 语法优化器:优化器是在表⾥⾯有多个索引的时候,决定使⽤哪个索引,或者在⼀个语句有多表关联(join)的时候,决定各个表的连接顺序执⾏器:调⽤存储引擎提供的接⼝3.redo logWAL(Write-Ahead Logging):先写⽇志,再写磁盘当有记录需要更新时,InnoDB 引擎就会先把记录写到 redo log,并更新内存,这时更新就算完成InnoDB 的 redo log 是固定⼤⼩的,可以配置为⼀组 4 个⽂件,每个⽂件的⼤⼩是 1GB,从头开始写,写到末尾就⼜回到开头循环写Tips:write pos 表⽰当前记录的位置,写到第 3 号⽂件末尾后就回到 0 号⽂件开头,checkpoint 表⽰当前要擦除的位置,擦除记录前要把记录更新到数据⽂件如果 write pos 追上 checkpoint,表⽰ redo log 满了,这时不能再执⾏新的更新,得停下来先擦掉⼀些记录,把 checkpoint 推进⼀下crash-safe:InnoDB 就可以保证即使数据库发⽣异常重启,之前提交的记录都不会丢失4.binlogMySQL Server 层也有⾃⼰的⽇志,称为归档⽇志(binlog),binlog ⽇志只能⽤于归档redo log 是 InnoDB 引擎特有的,binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使⽤redo log 是物理⽇志,记录的是在某个数据页上做了什么修改,binlog 是逻辑⽇志,记录的是这个语句的原始逻辑,⽐如给 ID=2 这⼀⾏的 c 字段加 1redo log 是循环写的,空间固定会⽤完,binlog 是可以追加写⼊的,binlog ⽂件写到⼀定⼤⼩后会切换到下⼀个,并不会覆盖以前的⽇志5.为什么要有两份⽇志?最开始 MySQL ⾥并没有 InnoDB 引擎,MyISAM 没有 crash-safe 的能⼒,binlog ⽇志只能⽤于归档InnoDB 是另⼀个公司以插件形式引⼊ MySQL 的,使⽤另外⼀套⽇志系统 redo log 来实现 crash-safe 能⼒6.更新语句内部执⾏流程update T set c=c+1 where ID=2执⾏器先找引擎取 ID=2 这⼀⾏,ID 是主键,引擎直接⽤树搜索找到这⼀⾏,如果 ID=2 这⼀⾏所在的数据页本来就在内存中,就直接返回给执⾏器,否则,需要先从磁盘读⼊内存,然后再返回执⾏器拿到引擎给的⾏数据,把这个值加上 1,⽐如原来是 N,现在就是 N+1,得到新的⼀⾏数据,再调⽤引擎接⼝写⼊这⾏新数据引擎将这⾏新数据更新到内存中,同时将这个更新操作记录到 redo log ⾥⾯,此时 redo log 处于 prepare 状态。
mysql学习笔记(一)之mysqlparameter
mysql学习笔记(⼀)之mysqlparameter基础琐碎总结-----参数化查询参数化查询(Parameterized Query )是指在设计与数据库链接并访问数据时,在需要填⼊数值或数据的地⽅,使⽤参数 (Parameter) 来给值,这个⽅法⽬前已被视为最有效可预防SQL注⼊攻击 (SQL Injection) 的攻击⼿法的防御⽅式。
下⾯将重点总结下Parameter构建的⼏种常⽤⽅法。
说起参数化查询当然最主要的就是如何构造所谓的参数:⽐如,我们登陆时需要密码和⽤户名,⼀般我们会这样写sql语句,Select * from Login where username= @Username and password = @Password,为了防⽌sql注⼊,我们该如何构建@Username和@Password两个参数呢,下⾯提供六种(其实⼤部分原理都是⼀样,只不过代码表现形式不⼀样,以此仅作对⽐,⽅便使⽤)构建参数的⽅法,根据不同的情况选⽤合适的⽅法即可:说明:以下loginId和loginPwd是户登陆时输⼊登陆⽤户名和密码,DB.conn是数据库连接,⽤时引⼊using System.Data.SqlClient命名空间⽅法⼀:SqlCommand command = new SqlCommand(sqlStr, DB.conn);command.Parameters.Add("@Username", SqlDbType.VarChar);command.Parameters.Add("@Pasword", SqlDbType.VarChar);command.Parameters["@Username"].Value = loginId;command.Parameters["@Pasword"].Value = loginPwd;⽅法⼆:SqlCommand command = new SqlCommand();command.Connection = DB.conn;mandText = sqlStr;command.Parameters.Add(new SqlParameter("@Username", loginId));command.Parameters.Add(new SqlParameter("@Pasword", loginPwd));⽅法三:Sqlcommand cmd=new Sqlcommand(sqlStr, DB.conn);cmd.parameters.add("@Username",DbType.varchar).value=loginId;cmd.parameters.add("@Pasword",DbType.varchar).value=loginPwd;⽅法四:Sqlcommand cmd=new Sqlcommand(sqlStr, DB.conn);cmd.parameters.addwithvalue("@Username",loginId);cmd.parameters.addwithvalue("@Pasword",loginPwd);⽅法五:Sqlcommand cmd=new Sqlcommand(sqlStr, DB.conn);SqlParameter para1=new SqlParameter("@Username",SqlDbType.VarChar,16);para1.Value=loginId;cmd.Parameters.Add(para1);SqlParameter para2=new SqlParameter("@Pasword",SqlDbType.VarChar,16);para2.Value=loginPwd;cmd.Parameters.Add(para2);⽅法六:SqlParameter[] parms = new SqlParameter[]{new SqlParameter("@Username", SqlDbType.NVarChar,20),new SqlParameter("@Pasword", SqlDbType.NVarChar,20),};SqlCommand cmd = new SqlCommand(sqlStr, DB.conn);// 依次给参数赋值parms[0].Value = loginId;parms[1].Value = loginPwd;//将参数添加到SqlCommand命令中foreach (SqlParameter parm in parms){cmd.Parameters.Add(parm);}法和实现⽅法的不同,也可以说是语法糖,但后记:鉴于园友对dedeyi,⿁⽕飘荡,guihwu的疑问,我在写⼀个说明。
Mysql笔记(附Mysql基础书pdf版)
Mysql笔记(附Mysql基础书pdf版)资料数据库篇SHOW DATABASES; //显⽰数据库系统中已经存在的数据库CREATE DATABASE 数据库名; //创建数据库DROP DATABASE 数据库名; //删除数据库表篇注:在使⽤操作表语句前,⾸先要使⽤USE语句选择数据库。
选择数据库语句的基本格式为“USE 数据库名”。
否则会报错,1046;CREATE TABLE 表名 ( 属性名数据类型 [完整性约束条件],属性名数据类型 [完整性约束条件],属性名数据类型);表名不能为SQL语句的关键字,⼀个表可以有多个属性。
定义时,字母⼤⼩写均可,各属性之间⽤逗号隔开,最后⼀个属性不需要加逗号。
主键主键有唯⼀值单字段主键属性名数据类型 primary key //创建主键,写在属性名数据类型后⾯;多字段主键primary key(属性名 1,属性名2,属性名n)两者的组合可以确定唯⼀的⼀条记录;外键外键不⼀定必须为⽗表的主键,但必须是唯⼀性索引,主键约束和唯⼀性约束都是唯⼀性索引;外键可以为空值;设置外键的基本语法规则如下:CONSTRAINT 外键别名 FOREIGN KEY(属性 1.1,属性1.2,属性1.n)REFERENCES 表名(属性2.1,属性2.2,属性2.n)其中,“外键别名”参数是为外键的代号;“属性1”参数列表是⼦表中设置的外键;“表名”参数是指⽗表的名称;“属性2”参数列表是⽗表的主键。
设置表的⾮空约束设置表的唯⼀性约束设置表的属性值⾃动增加查看表结构DESCRIBE 表名; // 查看表基本结构语句,可缩写为desc 表名SHOW CREATE TABLE 表名; //查看表详细结构语句(包含存储引擎、字符编码)删除表DROP TABLE 表名;//删除没有被关联的普通表删除⽗表需要先将外键删除,然后才能去删除⽗表。
字段篇//通过ALTER TABLE语句ALTER TABLE 旧表名 RENAME [TO] 新表名;//修改表名 TO参数是可选参数,是否在语句中出现不会影响语句的执⾏。
MySQL必知必会笔记存储过程游标触mysql 创建存储过
MySQL必知必会笔记存储过程游标触mysql 创建存储过第二十三章使用存储过程MySQL5 中添加了存储过程的支持。
大多数SQL语句都是针对一个或多个表的单条语句。
并非所有的操作都怎么简单。
经常会有一个完整的操作需要多条才能完成存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。
可将其视为批文件。
虽然他们的作用不仅限于批处理。
为什么要使用存储过程:优点1 通过吧处理封装在容易使用的单元中,简化复杂的操作2 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。
如果开发人员和应用程序都使用了同一存储过程,则所使用的代码是相同的。
还有就是防止错误,需要执行的步骤越多,出错的可能性越大。
防止错误保证了数据的一致性。
3 简化对变动的管理。
如果表名、列名或业务逻辑有变化。
只需要更改存储过程的代码,使用它的人员不会改自己的代码了都。
4 提高性能,因为使用存储过程比使用单条SQL语句要快5 存在一些职能用在单个请求中的MySQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码换句话说3个主要好处简单、安全、高性能缺点1 一般来说,存储过程的编写要比基本的SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。
2 你可能没有创建存储过程的安全访问权限。
许多数据库管理员限制存储过程的创建,允许用户使用存储过程,但不允许创建存储过程存储过程是非常有用的,应该尽可能的使用它们执行存储过程MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL .CALL接受存储过程的名字以及需要传递给它的任意参数CALL productpricing(@pricelow , @pricehigh , @priceaverage);//执行名为productpricing的存储过程,它计算并返回产品的最低、最高和平均价格创建存储过程CREATE PROCEDURE 存储过程名()一个例子说明:一个返回产品平均价格的存储过程如下代码:CREATE PROCEDURE productpricing()BEGINSELECT Avg(prod_price) AS priceaverageFROM products;END;//创建存储过程名为productpricing,如果存储过程需要接受参数,可以在()中列举出来。
mysql优化的几种方法
mysql优化的几种方法
1. 合理设计数据库结构:合理划分表和建立索引,将重要的字段和常用的查询条件作为索引,减少数据库查询的时间消耗。
2. 减少数据表的联接:尽量避免多表联接操作,可以通过使用冗余字段或者嵌套查询的方式来减少联接操作。
3. 使用合适的数据类型:选择合适的数据类型可以减少数据库存储空间,提高查询和更新的性能。
例如,使用整型代替字符串类型存储数字数据。
4. 避免全表扫描:尽量使用索引来查询数据,避免全表扫描的性能瓶颈。
如果有大量的数据需要查询,可以考虑分批次查询或者使用分页查询的方式。
5. 批量插入和更新:使用批量插入和更新的方式可以减少数据库的IO操作,提高数据写入的效率。
可以使用INSERT
INTO ... VALUES (...),或者使用LOAD DATA INFILE进行批量导入数据。
6. 优化查询语句:使用EXPLAIN语句分析查询语句的执行计划,找到慢查询的原因,然后通过修改查询语句或者调整索引来优化查询性能。
7. 使用缓存技术:可以使用缓存系统(如Redis、Memcached)来缓存查询结果,减少数据库的访问次数,提高系统的响应速度。
8. 避免使用SELECT *:尽量避免使用SELECT *查询所有字段,只选择需要的字段,避免传输和处理不必要的数据。
9. 分库分表:当数据量过大时,可以使用分库分表的方式来拆分数据,减少单个数据库的负载,提高数据库的扩展能力和性能。
10. 定期优化和维护:定期进行数据库优化和维护,包括备份
数据、清理无用数据、重新组织表等,保持数据库的健康状态,提高系统的稳定性和性能。
MySQL常见优化问题及解决方案
MySQL常见优化问题及解决方案MySQL是一种常用的关系型数据库管理系统,广泛用于各种规模的应用程序中。
然而,由于各种原因,MySQL在实际使用中可能会出现一些性能瓶颈和优化问题。
本文将讨论MySQL常见的优化问题,并提供相应的解决方案。
一、查询性能优化1.1 查询语句缓慢当查询语句执行缓慢时,可能是由于多种原因导致的。
首先,我们可以通过使用EXPLAIN语句来分析查询语句的执行计划。
通过该语句,我们可以查看MySQL是如何优化和执行查询语句的。
根据执行计划,我们可以确定是否存在索引缺失、不合理的查询语句等问题,并进行相应的优化。
1.2 索引选择不当索引是提高查询性能的关键。
然而,不恰当的索引使用会导致性能下降。
一方面,如果太多的索引存在,会增加写操作的开销。
另一方面,如果索引选择不当,可能会导致查询语句执行速度变慢。
因此,我们需要根据具体的查询场景,选择合适的索引类型和字段,并及时优化现有的索引。
1.3 查询语句设计不规范查询语句的设计也是影响性能的重要因素。
首先,我们应该尽量避免使用SELECT *的方式查询数据,因为这样会导致不必要的数据传输和内存消耗。
其次,我们需要合理选择JOIN的表,并使用合适的连接方式,避免产生过多的临时表和不必要的数据交互。
此外,对于复杂的查询需求,可以考虑分解为多个简单的查询语句,并使用临时表或子查询进行优化。
二、连接性能优化2.1 连接过多当MySQL连接数过多时,可能会导致性能下降和资源消耗过大。
因此,我们需要根据实际情况合理设置连接数。
一方面,可以通过修改MySQL配置文件中的max_connections参数来限制最大连接数。
另一方面,可以使用连接池技术,如使用连接池管理工具或自行开发连接池模块,有效管理数据库连接,提高连接效率。
2.2 连接超时连接超时是指连接在一定时间内没有活动,被MySQL服务器主动关闭。
默认情况下,MySQL的连接超时时间是8小时。
MySQL中的批量操作和批量提交优化技巧
MySQL中的批量操作和批量提交优化技巧MySQL是一种开源的关系型数据库管理系统,广泛应用于互联网企业和各种应用程序中。
在日常的数据库操作中,经常会涉及到批量操作和批量提交的需求,本文将介绍一些MySQL中的批量操作和批量提交的优化技巧。
一、批量操作的背景和意义在大部分应用中,数据库操作是性能瓶颈之一。
而频繁的单条SQL语句执行,会增加数据库的负载,降低系统性能。
而批量操作可以有效地减少与数据库的交互次数,提高数据操作的效率。
因此,学习和掌握批量操作技巧对于优化MySQL的性能非常重要。
二、批量插入数据的优化批量插入数据是指一次性将多条数据插入到数据库中。
常见的场景包括数据导入、数据迁移等。
常见的优化技巧有以下几点:1. 使用INSERT INTO ... VALUES(值1),(值2),(值3)的语法MySQL支持将多个值一次性插入到表中,可以大大减少插入语句的执行次数。
例如:INSERT INTO table_name (column1, column2)VALUES (value1, value2),(value3, value4),(value5, value6);2. 使用LOAD DATA INFILE语句LOAD DATA INFILE语句可以将数据文件直接导入到表中,效率非常高。
可以通过指定数据文件的路径和列分隔符等参数,将数据快速导入数据库中。
3. 提交间隔优化在批量插入数据时,可以通过设定合适的提交间隔来提高插入的效率。
默认情况下,MySQL会自动提交每一次插入操作,但是频繁的提交会增加IO开销。
可以通过设置SET autocommit=0来关闭自动提交,然后通过COMMIT语句手动执行提交操作。
在合适的时机使用COMMIT语句可以大大提高批量插入的效率。
三、批量更新数据的优化批量更新数据是指一次性修改多条数据的值。
常见的场景包括批量修改用户信息、批量更新数据状态等。
常见的优化技巧有以下几点:1. 使用UPDATE ... WHERE ...的语法MySQL支持一次性修改多条数据的值,可以根据条件将多条数据进行批量更新。
MySQL中批量插入和更新数据的最佳实践和性能优化
MySQL中批量插入和更新数据的最佳实践和性能优化在现代应用程序中,数据库是扮演着重要角色的一项技术,而MySQL作为最流行的关系型数据库管理系统之一,在大多数应用中都扮演着核心的角色。
在处理大量数据时,如何高效地进行批量插入和更新,既能提升数据处理性能,又能减少数据库开销成为了开发者关注的重点。
本文将探讨MySQL中批量插入和更新数据的最佳实践和性能优化方法。
一、批量插入数据1. 使用INSERT INTO VALUES语句插入多行数据如果需要向表中插入多行数据,可以通过使用INSERT INTO VALUES语句一次性插入多行数据,从而减少与数据库的通信次数,提高插入效率。
例如,假设有一个名为users的表,包含id(字段类型为INT)、name(字段类型为VARCHAR)和age(字段类型为INT)字段,需要插入多个用户的数据,可以使用以下语句:INSERT INTO users (id, name, age)VALUES (1, 'John', 25),(2, 'Jane', 30),(3, 'Mike', 35);通过使用该语句,可以一次性插入多行数据,避免了多次与数据库的交互。
2. 使用LOAD DATA INFILE语句导入数据如果需要导入大量数据,可以考虑使用LOAD DATA INFILE语句,该语句能够快速地将数据从文件中导入到数据库中。
与使用INSERT INTO VALUES语句相比,LOAD DATA INFILE可以实现更高效的数据批量导入。
使用该语句需要注意以下几点:- 确保文件的格式正确,以及文件的路径和权限设置正确。
- 根据数据文件的格式,设置LOAD DATA INFILE语句中的参数,如字段分隔符、行分隔符等。
- 确保导入的数据与目标表的字段类型和顺序相匹配。
例如,假设有一个名为users的表,包含id、name和age字段,同时有一个名为users.csv的文件,包含需要导入的用户数据,可以使用以下语句导入数据:LOAD DATA INFILE 'users.csv'INTO TABLE usersFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'(id, name, age);通过使用LOAD DATA INFILE语句,可以将数据从文件中快速地导入到数据库中,提升数据导入的效率。
mysql 笔记_20131021
修改列名称
修改列的名称 alter table student change column name name33 char(5);
修改表名
alter table A rename to B; mysql> alter table A rename to B; Query OK, 0 rows affected (0.00 sec)
执行 set autocommit=0; 完之后再查看:
在 mysql 中设置 set autocommit=0 后,执行完 SQL 语句之后,并没有自动提交。虽然在当 前的 session 中看到了生效,但是实际上没有提交到数据库。
如上图,虽然在 mysql 中使用 select 查询语句,我们看到只有一条数据,但是使用 java 工 具看到的却是两条,也就是之前的 delete 语句并没有真正生效。 如何使 SQL 语句真正生效呢? commit;
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+--------+
错误的编码是:
+--------------------------+--------+
删除列
alter table student drop column name;
修改列的类型
alter table student change column name name bit(1); alter table student modify column name bit(2); alter table fastfoldersbean change column path path varchar(150); 注意:以上两种方法都可以。
MySQL的批量插入和批量更新优化方法
MySQL的批量插入和批量更新优化方法MySQL是一种常用的关系型数据库管理系统,被广泛应用于大型企业的数据存储和处理中。
在实际应用中,我们经常需要对MySQL进行批量插入和批量更新操作,以提高数据库的效率。
本文将介绍MySQL的批量插入和批量更新优化方法,并提供一些实用的技巧,帮助读者更好地理解和应用这些方法。
一、批量插入优化方法1. 使用INSERT INTO VALUES语句批量插入数据在MySQL中,可以使用INSERT INTO VALUES语句批量插入数据。
例如,下面的语句可以向表中插入多条记录:INSERT INTO table_name (column1, column2, column3)VALUES (value1, value2, value3),(value4, value5, value6),(value7, value8, value9);这种方法可以减少与数据库的交互次数,从而提高插入数据的效率。
2. 使用LOAD DATA INFILE语句批量插入数据另一种常用的批量插入数据的方法是使用LOAD DATA INFILE语句。
该语句将从一个文本文件中读取数据,并将其插入到MySQL数据库中。
这种方法通常比使用INSERT INTO VALUES语句更快速。
例如,下面的语句可以将一个文本文件中的数据插入表中:LOAD DATA INFILE 'file_name.txt' INTO TABLE table_nameFIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';在使用LOAD DATA INFILE语句时,需要注意文件路径的设置和文件格式的匹配,以确保数据能够正确地导入数据库。
3. 使用预处理语句批量插入数据预处理语句是一种在MySQL中使用的一种方式,可以提高数据库操作的效率。
《千金良方 MySQL性能优化金字塔法则》读书笔记PPT模板思维导图下载
32.2 问题现 2
象
3 32.3 诊断分
析
4 32.4 挂起时
先做什么
5 32.5 本章小
结
33.1 硬件和 1
系统调优概览
2
33.2 CPU
3
33.3 网络
4
33.4 其他
5 33.5 本章小
结
34.1 问题现象
34.2 如何阅读死 锁日志
34.3 表结构及操 作步骤
34.4 本章小结
35.1 问题现 1
推荐序1
推荐序2
推荐序3
基础篇
01
第1章 MySQL初 始化安装、 简单安全 加...
02
第2章 MySQL常 用的两种 升级方法
03
第3章 MySQL体 系结构
04
第4章 perform ance_sc he...
05
第5章 perform ance_sc he...
06
第6章 perform ance_sc he...
2
I/O性能
3 42.3 参数和
结果详解
4 42.4 FIO测
试建议
5 42.5 课外阅
读
43.2 测试
43.1 安装和配 置HammerDB
43.3 课外阅读
44.1 安装
1
sysbench
44.2 测试案 2
例
3 44.3
sysbench参 数详解
4 44.4 数据库
测试输出信息 详解
5 44.5 课外阅
24.1 故障分析 和验证
24.3 本章小结
25.1 硬件和系统 调优
25.2 MySQL调优
25.3 架构调优 25.4 本章小结
mysql-笔记-命名、索引规范
mysql-笔记-命名、索引规范1 命名规范普通索引:idx_字段名唯⼀索引:ux_字段名所有数据库对象名称必须使⽤⼩写字母并⽤下划线分割禁⽌使⽤mysql保留关键字 ---如果表名中包含关键字查询时,需要将其有单引号括起来见名识意,并且最后不要超过32个字符临时库表以tmp_为前缀并以⽇期为后缀,备份表以bak_为前缀并以⽇期为后缀所有存储相同数据的列名和列类型必须⼀致--⼀般作为关联列,如果查询时关联列类型不⼀致会⾃动进⾏数据类型隐式转换,会造成列上的索引失效,导致查询效率降低2 数据库基本设计规范没有特殊要求下,所有表必须使⽤innodb存储引擎--⽀付事务、⾏级锁、更好的恢复性、⾼并发下性能更好数据库和表的字符集统⼀使⽤utf8---统⼀字符集可以避免由于字符集转换产⽣的乱码,不同的字符集进⾏⽐较前需要进⾏转换会造成索引失效所有表和字段都需要添加注释--使⽤comment从句添加表和列的备注进⾏数据字典的维护尽量控制单表数据量的⼤⼩,建议控制在500万以内,过⼤会造成修改表结构、备份、恢复都会有很⼤的问题。
可以⽤历史数据归档应⽤于⽇志数据,分库分表应⽤于业务数据等⼿段谨慎使⽤mysql分区表--分区表在物理上表现为多个⽂件,在逻辑上表现为⼀个表,跨分区查询效率可能更低,建议采⽤物理分表的⽅式管理⼤数据尽量做到冷热数据分离,减⼩表的宽度--mysql限制每个表最多存储4096列,并且每⼀⾏数据在⼤⼩不能超过65535字节减少磁盘IO--保证热数据的内存缓存命中率,避免读⼊⽆⽤的冷数,经常⼀起使⽤的列放到⼀个表中避免更多的关联操作。
禁⽌在表中建⽴预留字段--⽆法确认存储的数据类型,对预留字段类型的修改会对表进⾏锁定禁⽌在数据库中存储图⽚,⽂件等⼤的⼆进制数据---IO操作耗时,通常存储于⽂件服务器,数据库只存储⽂件地址信息禁⽌在线上做数据库压⼒测试禁⽌从开发环境、测试环境直接连接⽣成环境数据库2 数据库字段设计规范优先选择符合存储需要的最⼩的数据类型-- 字段⼤,建⽴索引空间⼤,IO次数多,索引性能差 1 将字符串转换成数字类型存储如:IP地址-插⼊数据前先⽤inet_aton把ip地址转为整型,节省空间,显⽰数据时使⽤inet_ntoa把整型ip 地址转为地址显⽰即可 2 对于⾮负型的数据如⾃增id IP 要优先使⽤⽆符号整型来存储,⽆符号相对于有符号可以多出⼀倍的存储空间 SIGNED INT -2147483648~2147483647 UNSIGNED INT 0~4294967295 VARCHAR(N)中的N代表的是字符数,⽽不是字节数 使⽤UTF8存储255个汉字 Varchar(255)=765个字节。
黑马程序员mysql运维篇笔记
黑马程序员MySQL运维篇笔记一、MySQL概述MySQL是一个流行的关系型数据库管理系统,广泛应用于各种场景,如Web开发、数据存储和数据分析等。
了解MySQL的基本概念、安装和配置是进行MySQL运维的基础。
二、MySQL安装与配置1.安装方式:可以选择源码安装、二进制安装或使用包管理器进行安装。
2.配置文件:MySQL的配置文件为f,其中包含了各种服务器参数,可以根据实际需求进行修改。
3.启动与停止:可以通过命令行工具或系统服务管理器来启动和停止MySQL服务。
三、MySQL基本操作1.创建数据库:使用CREATE DATABASE语句创建一个新的数据库。
2.删除数据库:使用DROP DATABASE语句删除一个数据库。
3.创建表:使用CREATE TABLE语句创建一个新的表。
4.删除表:使用DROP TABLE语句删除一个表。
5.插入数据:使用INSERT INTO语句向表中插入数据。
6.查询数据:使用SELECT语句查询表中的数据。
7.更新数据:使用UPDATE语句更新表中的数据。
8.删除数据:使用DELETE语句删除表中的数据。
四、MySQL性能优化1.索引优化:合理使用索引可以大大提高查询速度,但要注意避免过度索引。
2.SQL优化:优化SQL语句可以提高查询效率,如避免SELECT *,尽量使用连接(JOIN)代替子查询等。
3.服务器硬件优化:根据实际需求合理配置服务器硬件,如增加内存、使用SSD硬盘等。
4.定期备份与恢复:定期备份数据库可以防止数据丢失,而恢复备份可以帮助快速恢复数据。
5.监控与日志分析:使用工具监控MySQL服务器的性能指标,分析日志文件可以帮助排查问题。
6.安全性:加强MySQL服务器的安全性,如设置强密码、禁用不必要的功能等。
7.高可用性:通过主从复制、负载均衡等方式提高MySQL服务器的可用性。
8.数据迁移:在需要时可以将数据迁移到其他存储介质或服务器上,以满足性能或扩展需求。
mysql基础知识笔记总结
mysql基础知识笔记总结创建数据库在与数据进⾏任何其他操作之前,需要创建⼀个数据库。
数据库是数据的容器。
它可以⽤于存储联系⼈,供应商,客户或任何想存储的数据。
在MySQL中,数据库是⽤于存储和操作诸如表,数据库视图,触发器,存储过程等数据的对象的集合。
要在MySQL中创建数据库,请使⽤CREATE DATABASE语句,如下:CREATE DATABASE [IF NOT EXISTS] database_name;SQL我们来更详细地看看CREATE DATABASE语句:CREATE DATABASE语句的后⾯是要创建的数据库名称。
建议数据库名称尽可能是有意义和具有⼀定的描述性。
IF NOT EXISTS是语句的可选⼦句。
IF NOT EXISTS⼦句可防⽌创建数据库服务器中已存在的新数据库的错误。
不能在MySQL数据库服务器中具有相同名称的数据库。
例如,要创建⼀个名称为mytestdb数据库,可以执⾏CREATE DATABASE语句后接数据库名称:mytestdb,如果当前MySQL服务器中没有数据库:mytestdb,则创建成功,如下所⽰:CREATE DATABASE IF NOT EXISTS mytestdb;SQL执⾏此语句后,MySQL返回⼀条消息,通知新数据库是否已成功创建。
显⽰数据库SHOW DATABASES语句显⽰MySQL数据库服务器中的所有数据库。
您可以使⽤SHOW DATABASES语句来查看您要创建的数据库,或者在创建新数据库之前查看数据库服务器上的所有数据库,例如:+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || testdb || yiibaidb |+--------------------+5 rows in set在此MySQL数据库服务器中有6个数据库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
◆Mysql数据库的优化技术<大型网站优化技术>对mysql优化时一个综合性的技术,主要包括a: 表的设计合理化(符合3NF)b: 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]c: 分表技术(水平分割、垂直分割)d: 读写[写: update/delete/add]分离e: 存储过程[模块化编程,可以提高速度] 数据库的三层结构:f: 对mysql配置优化[配置最大并发数my.ini, 调整缓存大小]g: mysql服务器硬件升级h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name[USING index_type]ON tbl_name (index_col_name,...)◆什么样的表才是符合3NF (范式)表的范式,是首先符合1NF, 才能满足2NF , 进一步满足3NF1NF: 即表的列的具有原子性,不可再分解,即列的信息,不能分解, 只有数据库是关系型数据库(mysql/oracle/db2/informix/sysbase/sql server),就自动的满足1NF☞数据库的分类关系型数据库: mysql/oracle/db2/informix/sysbase/sql server非关系型数据库: (特点: 面向对象或者集合)NoSql数据库: MongoDB(特点是面向文档)2NF: 表中的记录是唯一的, 就满足2NF, 通常我们设计一个主键来实现id primary key ;3NF: 即表中不要有冗余数据, 就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放. 比如下面的设计就是不满足3NF:显示推导处理反3NF : 但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。
具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。
降低范式就是增加字段,允许冗余。
案例:Sql语句本身的优化问题是:如何从一个大项目中,迅速的定位执行速度慢的语句. (定位慢查询)①首先我们了解mysql数据库的一些运行状态如何查询(比如想知道当前mysql运行的时间/一共执行了多少次select/update/delete.. / 当前连接)show status常用的:show status like …uptime‟ ;show stauts like …com_select‟show stauts like …com_insert‟ ...类推update delete☞show [session|global] status like .... 如果你不写[session|global] 默认是session 会话,指取出当前窗口的执行,如果你想看所有(从mysql 启动到现在,则应该global)show status like …connections‟;//显示慢查询次数show status like …slow_queries‟;②如何去定位慢查询构建一个大表(400 万)-> 存储过程构建默认情况下,mysql认为10秒才是一个慢查询.修改mysql的慢查询.show variables like …long_query_time‟ ; //可以显示当前慢查询时间set long_query_time=1 ;//可以修改慢查询时间构建大表->大表中记录有要求, 记录是不同才有用,否则测试效果和真实的相差大.创建:CREATE TABLE dept( /*部门表*/deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/dname V ARCHAR(20) NOT NULL DEFAULT "", /*名称*/loc V ARCHAR(13) NOT NULL DEFAULT "" /*地点*/) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;CREATE TABLE emp(empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/job V ARCHAR(9) NOT NULL DEFAULT "",/*工作*/mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*上级编号*/hiredate DATE NOT NULL,/*入职时间*/sal DECIMAL(7,2) NOT NULL,/*薪水*/comm DECIMAL(7,2) NOT NULL,/*红利*/deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/)ENGINE=MyISAM DEFAULT CHARSET=utf8 ;CREATE TABLE salgrade(grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,losal DECIMAL(17,2) NOT NULL,hisal DECIMAL(17,2) NOT NULL)ENGINE=MyISAM DEFAULT CHARSET=utf8;测试数据INSERT INTO salgrade V ALUES (1,700,1200);INSERT INTO salgrade V ALUES (2,1201,1400);INSERT INTO salgrade V ALUES (3,1401,2000);INSERT INTO salgrade V ALUES (4,2001,3000);INSERT INTO salgrade V ALUES (5,3001,9999);为了存储过程能够正常执行,我们需要把命令执行结束符修改delimiter $$create function rand_string(n INT)returns varchar(255) #该函数会返回一个字符串begin#chars_str定义一个变量chars_str,类型是varchar(100),默认值'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';declare chars_str varchar(100) default'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';declare return_str varchar(255) default '';declare i int default 0;while i < n doset return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));set i = i + 1;end while;return return_str;end $$如果希望在程序中使用,是Ok!创建一个存储过程create procedure insert_emp(in start int(10),in max_num int(10))begindeclare i int default 0;#set autocommit =0 把autocommit设置成0set autocommit = 0;repeatset i = i + 1;insert into emp values ((start+i) ,rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());until i = max_numend repeat;commit;end $$#调用刚刚写好的函数, 1800000条记录,从100001号开始call insert_emp(100001,4000000);③这时我们如果出现一条语句执行时间超过1秒中,就会统计到.④如果把慢查询的sql记录到我们的一个日志中在默认情况下,我们的mysql不会记录慢查询,需要在启动mysql时候,指定记录慢查询才可以bin\mysqld.exe - -safe-mode - -slow-query-log [mysql5.5 可以在my.ini指定]bin\mysqld.exe –log-slow-queries=d:/abc.log [低版本mysql5.0可以在my.ini指定]先关闭mysql,再启动, 如果启用了慢查询日志,默认把这个文件放在my.ini 文件中记录的位置#Path to the database rootdatadir="C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/Data/"⑤测试,可以看到在日志中就记录下我们的mysql慢sql语句.优化问题.通过explain 语句可以分析,mysql如何执行你的sql语句, 这个工具的使用放一下,一会说.添加索引【小建议: 】四种索引(主键索引/唯一索引/全文索引/普通索引)1.添加1.1主键索引添加当一张表,把某个列设为主键的时候,则该列就是主键索引create table aaa(id int unsigned primary key auto_increment ,name varchar(32) not null defaul …‟);这是id 列就是主键索引.如果你创建表时,没有指定主键索引,也可以在创建表后,在添加, 指令:alter table 表名add primary key (列名);举例:create table bbb (id int , name varchar(32) not null default …‟);alter table bbb add primary key (id);1.2普通索引一般来说,普通索引的创建,是先创建表,然后在创建普通索引比如:create table ccc(id int unsigned,name varchar(32))create index 索引名on 表(列1,列名2);1.3创建全文索引全文索引,主要是针对对文件,文本的检索, 比如文章, 全文索引针对MyISAM有用.创建:CREATE TABLE articles (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,title VARCHAR(200),body TEXT,FULLTEXT (title,body))engine=myisam charset utf8;INSERT INTO articles (title,body) V ALUES('MySQL Tutorial','DBMS stands for DataBase ...'),('How To Use MySQL Well','After you went through a ...'),('Optimizing MySQL','In this tutorial we will show ...'),('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),('MySQL vs. YourSQL','In the following database comparison ...'),('MySQL Security','When configured properly, MySQL ...');如何使用全文索引:错误用法:select * from articles where body like …%mysql%‟; 【不会使用到全文索引】证明:explain select * from articles where body like …%mysql%‟正确的用法是:select * from articles where match(title,body) against(…database‟); 【可以】☞说明:1.在mysql中fulltext 索引只针对myisam生效2.mysql自己提供的fulltext针对英文生效->sphinx (coreseek) 技术处理中文3.使用方法是match(字段名..) against(…关键字‟)4.全文索引一个叫停止词, 因为在一个文本中,创建索引是一个无穷大的数,因此,对一些常用词和字符,就不会创建,这些词,称为停止词.1.4唯一索引①当表的某列被指定为unique约束时,这列就是一个唯一索引create table ddd(id int primary key auto_increment , name varchar(32) unique);这时, name 列就是一个唯一索引.unique字段可以为NULL,并可以有多NULL, 但是如果是具体内容,则不能重复. 主键字段,不能为NULL,也不能重复.②在创建表后,再去创建唯一索引create table eee(id int primary key auto_increment, name varchar(32));create unique index 索引名on 表名(列表..);2.查询索引desc 表名【该方法的缺点是:不能够显示索引名.】show index(es) from 表名show keys from 表名3.删除alter table 表名drop index 索引名;如果删除主键索引。