mysql数据库优化技巧

表的设计合理(字段合理,符合3NF)
添加适当索引(index)[主要4种:普通索引,主键索引,唯一索引unique,全文索引]
分表技术(水平分表->拆分表结构,垂直分表->根据适当的方式,将数据存储到不同的库表当中)
读写分离
存储过程(模块化编程,少去编译环节提高速度)
对mysql优化配置(最大连接数my.ini 或 my.cnf的参数max_connections,调整缓存大小)
mysql服务器硬件
定期维护清除不需要的数据,定时进行碎片整理(MyISAM)

1、表的设计合理(字段合理,符合3NF)

1NF:对属性的原则性约束,要求列具有原子性,不可再分解(只要是关系型数据库就自动满足1NF)
2NF:对记录的唯一性约束,要求记录有唯一标识,即实体的唯一性(一般通过添加主键实现)
3NF:对字段的冗余性约束,要求字段没有冗余(一般通过表的外键实现)
但是没有冗余的数据库未必就是好的设计方案,例如 商城用户下单的地址信息

2、SQL语句优化(慢查询)

show status;  //提供服务器的状态信息
show [session|global] status like 'com_select'; //select次数 默认为session 当前链接的统计结果,global表示数据库上次至今的统计结果
show STATUS like 'connections';//当前连接数
show STATUS like 'uptime';//服务器运行时间
show STATUS like 'slow_queries';//慢查询的次数 默认情况mysql中10秒以上为慢查询
show VARIABLES like 'long_query_time';//当前默认慢查询时间
set long_query_time=1;//设置慢查询时间
默认情况下:mysql不会记录慢查询,只有启动mysql时候,指定记录慢查询才可以
mysqld.exe --safe-mode --slow-query-log [版本5.5 可以在my.ini中指定]

查看开启慢查询

全文索引:

1.在mysql中fulltext 索引只针对 myisam生效
2.mysql自己提供的fulltext针对英文生效->sphinx (coreseek) 技术处理中文
3.使用方法是 match(字段名..) against(‘关键字’)
4.全文索引:停止词, 因为在一个文本中,创建索引是一个无穷大的数,因此,对一些常用词和字符,就不会创建,这些词,称为停止词.比如(a,b,mysql,the)
select match(title,body) against ('database') from articles;(输出的是每行和database的匹配度)

唯一索引:

unique字段可以为NULL,并可以有多NULL, 但是如果是具体内容,则不能重复,但是不能存有重复的空字符串’’

一般字段建立索引规则如下:

a.一般经常性放到where条件之后的
b.该字段内容不是唯一的固定几个值(例如:性别)
c.字段内容不是经常变化

索引的使用

查询需要使用索引最重要的是查询条件中需要使用索引

下面几种情况可能使用索引:
对于创建的多列索引,查询条件如果使用了最左边的列,索引一般会被使用(比如创建了 create index PersonIndex on Person(name,sex,age)相当于建立了(name)(name,sex)(name,sex,age) name是最左边的列,必须出现在where条件中,否则使用不了索引)
对于使用like查询,查询如果是“%aaa”不会使用索引,对于“aaa%”会使用到索引,如果一定需要前面有变化的值,则考虑使用全文索引(fulltext)或者sphinx(英文索引引擎),如果是中文,则考虑使用coreseek(sphinx中文版本 相当于sphinx+mmseg中文分词)
下列几种情况不会使用索引:
如果条件中有or ,即使有条件中带索引也不会使用,换言之,使用or条件就是要求使用的所有字段都必须建立索引,才能使用起来索引
对于多列索引,如果没有使用最左边的字段,也不会使用索引
like查询以%开头
如果字段类型是字符串,那一定要在条件中将数据使用引号引起来,否则不使用索引
如果mysql估计全表扫描比索引要快,则不使用索引

Sql语句优化:

在使用group by 分组查询是,默认分组后,还会排序,可能会降低速度,在group by 后面增加 order by null 就可以防止排序

mysql的索引和最左前缀原则:

通过实例理解单列索引、多列索引以及最左前缀原则

实例:现在我们想查出满足以下条件的用户id:
mysql>SELECT `uid` FROM people WHERE lname`='Liu' AND `fname`='Zhiqun' AND `age`=26
因为我们不想扫描整表,故考虑用索引。 单列索引:
ALTER TABLE people ADD INDEX lname (lname);
将lname列建索引,这样就把范围限制在lname='Liu'的结果集1上,之后扫描结果集1,产生满足fname='Zhiqun'的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。 由 于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。 2.多列索引:
ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);
为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。 注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。 3.最左前缀:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。 注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

mysql授权:

grant all privileges on *.* to zzp@'%' identified by '456852';

mysql的相关信息的更多相关文章

  1. Linux Mysql 权限相关信息 来源于网络

    查看用户权限 show grants for 你的用户 比如: show grants for root@’localhost’; mysql> use mysql; Database chan ...

  2. 查看mysql相关信息

    查看本机mysql的相关信息,执行以下SQL即可: SHOW VARIABLES LIKE "%char%";

  3. MySQL查看数据库相关信息

    使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令   1:查看显示所有数据库 mysql> show databases ...

  4. 查看mysql数据库连接数、并发数相关信息

    查看mysql数据库连接数.并发数相关信息. - caodongfang126的博客 - CSDN博客 https://blog.csdn.net/caodongfang126/article/det ...

  5. Mysql查看连接数相关信息

    MySQL查看连接数相关信息在 数据库:INFORMATION_SCHEMA 表:PROCESSLIST 表结构如下: mysql> desc PROCESSLIST; +---------+- ...

  6. (转)查看mysql数据库连接数、并发数相关信息

    查看mysql数据库连接数.并发数相关信息 1.mysql> show status like 'Threads%';+-------------------+-------+| Variabl ...

  7. [转]MySQL查看数据库相关信息

    原文链接:MySQL查看数据库相关信息 使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令 1:查看显示所有数据库 mysql& ...

  8. mysql命令学习笔记(1):show table status like 'user';显示表的相关信息

    show table status like 'user';显示表的相关信息 +------------+--------+---------+------------+------+-------- ...

  9. Mysql优化相关总结

    Mysql优化相关总结 2016-05-31 数据库集中营 优化顺序: 选择适当的引擎和表结构和数据类型 建立索引,优化sql. 增加缓存,redis.memcache. 主从.主主,读写分离. my ...

随机推荐

  1. php7 扩展模块添加

    php 扩展模块添加   1. 新增安装扩展模块的位置 [root@node_22 ~]# ls /usr/local/php7/lib/php/extensions/no-debug-non-zts ...

  2. JsonNode、JsonObject常用方法

    最近项目中要用json,闲暇时间,对json进行下总结. 1.JsonNode 项目中用到的jar包   import com.fasterxml.jackson.core.JsonParseExce ...

  3. VS Code直接调试Angular代码

    安装VS Code扩展 安装Debugger for Chrome 安装Debugger for Firefox 配置Launch.json文件 Launch.json文件的创建和生成我们可以利用VS ...

  4. 02 观察 mysql 周期性变化

    ()首先写一个shell 脚本 vim mysql_status.sh 脚本如下: #!bin/bash while true do mysqladmin -urooy ext|awk '/Queri ...

  5. android4.4上全屏界面实现禁止状态栏下拉

    附上我改动的方法:PhoneWindowManager.java里面的改动 --- a/frameworks/base/policy/src/com/android/internal/policy/i ...

  6. cookie绕过验证码并关联对话发送一个随笔草稿箱

    先手动发送一个草稿,然后用fiddler取到body参数 代码: #coding:utf-8import requests login_url="https://passport.cnblo ...

  7. php 实现Iterator 接口

    <?php class MyIterator implements Iterator{ private $var = array(); public function __construct($ ...

  8. 【BZOJ2783】[JLOI2012]树 DFS+栈+队列

    [BZOJ2783][JLOI2012]树 Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节 ...

  9. 有关弱类型意识、DOM、动态语言与函数式编程

    一.弱类型意识  js变量是没有类型的 var a =1;   //a 就是一个变量  不要提类型 变量可以赋予任何类型的值,类型仅仅是值得性质  与变量无关   js 的基本类型 变量未赋值时,其值 ...

  10. vsftp or pureftpd

    一.安装pureftpd //这个软件比vsftp配置起来更加灵活和安全. /*官网是 http://www.pureftpd.org/project/pure-ftpd*/ [root@localh ...