• mysql的相关信息


    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';
    
  • 相关阅读:
    实验8-1-8 报数 (20分) 浙大版《C语言程序设计实验与习题指导(第3版)》题目集
    6-11 求自定类型元素序列的中位数 (25分)
    L2-032 彩虹瓶 (25分)
    L2-031 深入虎穴 (25分)
    L2-029 特立独行的幸福 (25分)
    L1-064 估值一亿的AI核心代码 (20分) 团体程序设计天梯赛-练习集
    7-16 一元多项式求导 (20 分) 数据结构与算法题目集(中文)
    7-28 搜索树判断 (25 分) 数据结构与算法题目集(中文)
    数据加密之SymmetricAlgorithm加密
    数据加密之RijndaelManaged加密
  • 原文地址:https://www.cnblogs.com/mracale/p/9182896.html
Copyright © 2020-2023  润新知