数据库杂记

1、MySql开启远程用户登录

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

 

2、Linux上mysql基本操作

        rpm -qa | grep mysql  // 这个命令就会查看该操作系统上是否已经安装了mysql数据库

        rpm -e mysql  // 普通删除模式

        rpm -e --nodeps mysql  // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除

        安装mysql     yuminstall -y mysql-server mysql mysql-deve

 

3、使用hibernate读取数据库表名的sql语句(hibernate中使用原生sql语句):

    SELECT TABLE_NAME FROM information_schema.TABLES WHERE  TABLE_SCHEMA=DATABASE();

4、使用hibernate读取表的字段名的sql语句(hibernate中使用原生sql语句):

    SELECT column_name FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=YOUR_TABLE_NAME

 

Sql语句优化:

      1、应尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描。

    例如:select id from t where num = 10 or num = 20;

    可以这样查询:

            select id from t where num = 10 union all select id from  t where num = 20;

 

       2、尽量不要用子查询 或者使用 join连接查询

           例如 : select a.id from AA a where aid in (select aid from BB)

           可以: select a.id from AA a, BB b where a.aid = b.aid 

 

       3、如果使用JOIN查询,应该确认两个表中join的字段是被建过索引的,这样mysql内部会启动优化Join的SQL语句

 

        4、在某些情况下可以用exist代替in

             如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 

                例如:表A(小表),表B(大表)

   (1):select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引;

         select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引。相反的

 

   (2):

        select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引;

        select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。

转载于:https://my.oschina.net/dingzebin/blog/884015

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值