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列的索引。