mysql服务器安装和优化_Mysql安装、配置、优化

一、安装Mysql5.5为例。

1、运行 mysql 安装文件;

2、按 Next,然后选择安装方式,有 "Typical(默认)"、"Complete(完全)"、"Custom(用户自定义)",选择第二个选项 "Custom",下一步, MySQL Server (mysql服务器), Developer Components (开发者部分), Debug Symbols (调试符号), Server data files (服务器数据文件) 默认;

3、改变安装路径;原路径是"C:\Program Files\MySQL\MySQL Server 5.5\",也可以修改为:"E:\Program Files\MySQL Server 5.5\"。下一步,安装,会弹出窗口,点下一步,再点下一步,选择"Launch the MySql instance Configuration Wizard",意思是启动MySQL实例配置向导,再点击Finish,再点下一步,Detailed Configuration(详细配置)和Standard Configuration(标准配置),选择详细配置,下一步;

4、选择服务器类型,"Developer Machine(开发测试类,mysql占用很少资源)"、"Server Machine(服务器类型,mysql占用较多资源)"、"DedicatedMySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)",根据自己的类型选择,测试软件选"Developer Machine",服务器选"Server Machine",下一步;

5、选择创建 MySQL表时使用的表处理器,"Multifunctional Database"(通用多功能型,好,同时使用InnoDB和 MyISAM 储存引擎)、"Transactional Database Only"(服务器类型,专注于事务处理,主要使用 InnoDB 只偶尔使用 MyISAM,一般)、"Non-Transactional DatabaseOnly"(非事务处理型,较简单,完全禁用 InnoDB 储存引擎,将所有服务器资源指派给 MyISAM 储存引擎),随自己的用途而选择。

二 、新增my.ini文件初始化配置

[mysqld]

# 配置端口号

port=3306

# 设置mysql的安装目录

basedir=C:\\java\\mysql-8.0.11-winx64

# 设置mysql数据库的数据的存放目录

datadir=C:\\java\\mysql-8.0.11-winx64\\Data

# 设置允许最大连接数

max_connections=200

# 设置允许连接失败的次数。

max_connect_errors=10

# 服务端使用的字符集默认为UTF8

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

# 默认使用“mysql_native_password”插件认证

default_authentication_plugin=mysql_native_password [mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8 [client]

# 设置mysql客户端连接服务端时默认使用的端口

port=3306 default-character-set=utf8

MySQL优化

1. 避免使用 select *      你需要什么信息,就查询什么信息,查询的多了,查询的速度肯定就会慢

2.  当你只需要查询出一条数据的时候,要使用 limit 1  比如你要查询数据中是否有男生,只要查询一条含有男生的记录就行了,后面不需要再查了,使用Limit 1 可以在找到一条数据后停止搜索

3.   建立高性能的索引  索引不是随便加的也不是索引越多越好,更不是所有索引对查询都有效

4. 建数据库表时,给字段设置固定合适的大小.字段不能设置的太大,设置太大就造成浪费,会使查询速度变慢

5.   要尽量使用not null

6.   EXPLAIN 你的 SELECT 查询使用EXPLAIN,可以帮助你更了解MySQL是如何处理你的sql语句的, 你可以查看到sql的执行计划,这样你就能更好的去了解你的sql语句的不足,然后优化语句.

7. 在Join表的时候,被用来Join的字段,应该是相同的类型的,且字段应该是被建过索引的,这样,MySQL内部会启动为你优化Join的SQL语句的机制。

8.   如果你有一个字段,比如“性别”,“国家”,“民族”, “省份”,“状态”或“部门”,这些字段的取值是有限而且固定的,那么,应该使用 ENUM 而不是 VARCHAR。

因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。

9.  垂直分割将常用和有关系的字段放在相同的表中,把一张表的数据分成几张表    这样可以降低表的复杂度和字段的数目,从而达到优化的目的

10.  优化where查询

①. 避免在where子句中对字段进行表达式操作

比如: select 列 from 表 where age*2=36;   建议改成  select 列 from 表 where age=36/2;

②. 应尽量避免在 where 子句中使用 !=或<> 操作符,否则将引擎放弃使用索引而进行全表扫描。

③. 应尽量避免在 where 子句中对字段进行 null 值 判断

④. 应尽量避免在 where 子句中使用 or 来连接条件

11. 不建议使用%前缀模糊查询,这种查询会导致索引失效而进行全表扫描

例如LIKE “%name”或者LIKE “%name%这两种都是不建议的.但是可以使用LIKE “name%”。

对于LIKE “%name%,可以使用全文索引的形式

12.  要慎用in和 not in

例如:select id from t where num in(1,2,3)   建议改成 select id from t where num between 1 and 3

对于连续的数值,能用 between 就不要用 in 了

13. 理解in和exists, not in和not exists的区别

很多时候用 exists 代替 in 是一个好的选择:如查询语句使用了not in那么内外表都进行全表扫描,没用到索引,而not exists子查询依然能用到表上索引,所以无论哪个表大,用not exists都比not in要快。

select num from a where num in(select num from b)

建议改成: select num from a where exists(select 1 from b where num=a.num)

区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。所以IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

关于not in和not exists,推荐使用not exists,不仅仅是效率问题,not in可能存在逻辑问题

14. 理解select Count (*)和Select Count(1)以及Select Count(column)区别

一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的

假如表沒有主键(Primary key), 那么count(1)比count(*)快,

如果有主键的話,那主键作为count的条件时候count(主键)最快

如果你的表只有一个字段的话那count(*)就是最快的

count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计

(优化部分链接:https://www.jianshu.com/p/074f3eafcadf)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值