mysql常用语句

一:添加字段:

ALTER TABLE `jifen_gather` ADD `lo_baidu_valid_uv` INT( 11 ) NOT NULL DEFAULT '0' COMMENT '有效的百度搜索uv' AFTER `lo_baidu_no_xiala` ;

 

二:表链接时的事项:

一般要使得数据库查询语句性能好点遵循一下原则:

  • 在做表与表的连接查询时,大表在前,小表在后
  • 不使用表别名,通过字段前缀区分不同表中的字段
  • 查询条件中的限制条件要写在表连接条件前
  • 尽量使用索引的字段做为查询条件

笛卡尔积
      笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表连接即为笛卡尔积(交叉连接)

http://www.jb51.net/article/28188.htm

 

三:mysql中inner join 与使用 where 进行联表查询有什么区别?

以下两条sql语句有什么差别:  

select * from a inner join b on a.id = b.id
select * from a,b where a.id = b.id

mysql 经过优化器优化后执行以上两条你给出的sql没有任何区别别。

INNER JOIN和,(逗号)在无联合条件下是语义相同的:两者都可以对指定的表计算出笛卡儿乘积(也就是说,第一个表中的每一行被联合到第二个表中的每一行)。

请参考mysql手册
http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select

 

差集:

NOT IN 表示差集
SELECT * FROM table1 WHERE name NOT IN (SELECT name FROM table2)

 

四:mysql中获取当前使用的数据库:

使用:

status;
或者
show database;

 

五:MySQL 性能 mysql如何优化大数据量情况下的distinct

回答一:

在mysql的优化中,有一条是:大量的排序操作影响系统性能,所以尽量减少排序操作。GROUP BY、ORDER BY、 ROLLUP、DISTINCT等都会产生排序。少用DISTINCT!
至于DISTINCT为什么效率低上面兄弟们说的已经很明白了,我这里不说了。我主要说一下用什么方法尽量替代DISTINCT。用EXISTS代替DISTINCT。EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。

低效率:
select distinct userid,username from user,userinfo where user.userid=userinfo.userid
高效率:
select userid,username from user where exists (select 'T' from userinfo where userinfo.userid=user.userid)

其中T的意思是:
因为exists只是看子查询是否有结果返回,而并不关心返回的是什么内容,因此通常建议写一个常量,至少性能不可能比select 一个具体的字段出来差,而某些情况下,select具体的字段出来性能可能比select 一个常量出来要差得多。

你可以在大数据量的数据库里测试一下上面的sql。不过以上方案仅适合userid为唯一主键的情况。

 

回答二:

DISTINCT操作只需要找出所有不同的值就可以了。而GROUP BY操作还要为其他聚集函数进行准备工作。从这一点上将,GROUP BY操作做的工作应该比DISTINCT所做的工作要多一些。但实际上,GROUP BY 效率会更高点,对于DISTINCT操作,它会读取了所有记录,而GROUP BY需要读取的记录数量与分组的组数量一样多,也就是说比实际存在的记录数目要少很多,因此单表查询时建议用group by替换distinct。

 

 

posted @ 2014-07-22 15:36  一束光  阅读(334)  评论(0编辑  收藏  举报

友情链接

CFC4N