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

     

     

  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/jalja/p/6249307.html
Copyright © 2011-2022 走看看