Mysql sql语句技巧与优化

一、常见sql技巧

  1、正则表达式的使用

    

  2、巧用RAND()提取随机行

      mysql数据库中有一个随机函数rand()是获取一个0-1之间的数,利用这个函数和order by一起能够吧数据随机排序,

、       mysql>select * from stu order by rand();

      下面是通过limit随机抽取了3条数据样本。

        mysql>select * from stu order by rand() limit 3;

  3、利用GROUP BY 的WITH ROLLUP子句统计

      使用group by的with rollup子句可以检索出更多的聚合信息。

        mysql>select cname,pname,count(pname) from demo group by cname,pname;

        同样使用with rollup关键字后,统计出更多的信息。注意:with rollup不可以和order by同时使用。

        mysql>select cname,pname,count(pname) from demo group by cname,pname with rollup;

  4、用BIT GROUP FUNCTIONS 做统计

      在使用group by语句时可以同时使用bit_anf、bit_or函数来完成统计工作,这两个函数的主要作用是做数值之间的逻辑位运算。

        mysql>select id,bit_or(kind) from order_rab group by id;      //二进制位运算

        对order_rab表中id分组时对kind做位与和或计算。

        mysql>select id,bit_and(kind) from order_rab group by id;    //二进制余运算,只有11才为1

  5、使用外健要注意的问题

      创建外健如下:

        mysql>create table temp(id int,name char(20),foreign key(id) references outTable(id) on delete cascade on update cascade));

        注意:innodb类型的表支持外健,myisam类型的表,虽然创建可以成功,但不起作用,主要原因是不支持外健。

  6、mysql中help的使用

      a、?%可以获得所有mysql>里的命令,

      b、?create

      c、?opt%,因为记不住全称。

二、mysql的优化

  1、优化sql语句的一般步骤

      通过show status命令了解各种sql的执行频率。

        格式:mysql>show [session|global] status;

          session:(默认)表示当前链接

          globla:表示自数据库启用至今

        如:mysql>show status;

          mysql>show global status;

          mysql>show status like "Com_%";

          mysql>show global status like "Com_%";

        参数说明:

          Com_select 执行select操作的次数,一次查询值累计加1

          Com_update 执行update操作的次数

          Com_insert 执行insert操作的次数

          Com_delete 执行delete操作的次数

        只针对Innodb引擎的:

          InnoDB_rows_read执行select操作的次数

          InnoDB_rows_update执行update操作的次数

          InnoDB_rows_insert执行insert操作的次数

          InnoDB_rows_delete执行delete操作的次数

        其他:

          connections链接mysql的数量

          Uptime服务器已经工作的秒数

          Slow_queries慢查询的次数

  2、定位执行效率较低的sql语句:

      a、explain select * from table where id = 1000;

      b、desc select * from table where id = 1000;

          

          

    c、优化的顺序:

        1)查看慢查询日志,日志里查询超过10秒的说明产寻幽问题

        2)通过desc定位这条语句哪里有问题。

        3)通过方案对问题点进行优化,如加索引

  2、索引问题

  3、两个简单的优化方法

  4、常用sql的优化

猜你喜欢

转载自www.cnblogs.com/yuyangphpweibo/p/9044374.html