zoukankan      html  css  js  c++  java
  • mysql学习之 sql语句的技巧及优化

    一、sql中使用正则表达式

    select name,email from user where email Regexp "@163[.,]com$";

    sql语句中使用Regexp对性能影响较大。

    二、使用Rand()函数获取随机数据

    rand();随机数函数

    1、随机排序 mysql> select * from hello order by rand();

    2、随机列抽取3条 mysql> select * from hello order by rand() limit 3;

     三、使用group by 分组语句后面跟with rollup 关键字,可以统计出更多的信息。(with rollup后不能再使用order by)

     四、外键

    表B1中的一个普通的列是另一个表B2的主键,如果B2表中的一条记录删除那表B1中关联该主键值的列也应该删除。

    不建议使用外键,在使用的时候要注意。

    mysql中的Innodb存储引擎支持外键。

    五、使用 ?  % 查看帮助手册

    ? create 、? opti% 、? contents 、? functions

     

    mysql优化

    一、sql语句如何性能分析

    1、查询数据库各种sql类型语句的执行情况

    show [session | global ] status :了解数据库中各种sql的执行频率

    session:表示查询当前建立连接以来各种SQL的执行频率

    global:表示自数据库启动以来各种SQL的执行频率

    一般我们主要查询这些信息:

    com_xxx :表示每个xxx语句的执行次数,该方式可以查看mysql任何存储引擎的sql语句执行次数记录。

    show GLOBAL status like "com_select%";  // 查看sql 中select语句的执行次数
    show GLOBAL status like "com_insert%";  // 查看sql 中insert语句的执行次数
    show GLOBAL status like "com_update%"; // 查看sql 中update语句的执行次数
    show GLOBAL status like "com_delete%";// 查看sql 中delete语句的执行次数

    对于存储引擎为InnoDB:该方式查询的记录数是计算你每次SQL操作数据的行数。(例如:delete from hello where id <=10 该语句删除了10条记录,那么Innodb_rows_deleted=10)

    mysql> show status like 'connections';   查看mysql的连接量(无论一次连接是否成功)

    mysql> show status like 'uptime'; 查看mysql工作时间 单位秒

    2、关于mysql慢查询

    a、查看mysql慢查询状态

    • slow_query_log    :是否开启慢查询日志,1表示开启,0表示关闭。
    • log_slow_queries  :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
    • slow_query_log_file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log  查看慢查询日志位置:mysql> show variables like 'slow_query%';
    • 开启慢查询:提供了全局变量slow_query_log、slow_query_log_file可以灵活地控制enable/disable慢查询,该方式不必重启服务器, set global slow_query_log=1开启了慢查询日志只对当前数据库生效,如果MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf

    b、慢查询时间(秒):会将select 语句执行时间超过10秒的sql记录到慢查询日志中

     设置慢查询时间   mysql> set global long_query_time =1;

    注意:使用命令 set global long_query_time=1修改后,需要重新连接或新开一个会话才能看到修改值。你用show variables like 'long_query_time'查看是当前会话的变量值,你也可以不用重新连接会话,而是用show global variables like 'long_query_time';

    3、慢查询日志分析

    1、查看一共执行过几次慢查询:

       

     结果: 超过1秒即为慢查询,一共有2条慢查询

    2、查看这些慢查询sql 

        打开慢查询日志文件 DESKTOP-GGLOGPK-slow.log

        

    • Query_time SQL执行的时间,越长则越慢
    • Lock_time 在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间
    • Rows_sent 查询返回的行数
    • Rows_examined 查询检查的行数

        在这里可以记录每次慢查询的sql语句。

     3、使用 desc 与explain 定位分析sql

     

     

  • 相关阅读:
    HDU 4975 A simple Gaussian elimination problem.
    HDU 4888 Redraw Beautiful Drawings
    ZOJ 3795 Grouping
    HDU 4971 A simple brute force problem.
    ERROR: unable to bind listening socket for address ’127
    linux命令
    有关nginx的配置文件 之server
    CentOS LNMP环境搭建 各版本
    PHP扩展安装方法
    Nginx如何配置虚拟主机?
  • 原文地址:https://www.cnblogs.com/jalja/p/6249307.html
Copyright © 2011-2022 走看看