1、select * 和select name区别?
mysql 5.1.37
表记录数41,547,002,即4000w行
使用远程客户端取1000条数据,统计时间:
SELECT * FROM dmsp.dmsp_dimension_content LIMIT 0, 1000;
时间2.218s,网络消耗0.547s
SELECT id, appid, aop, t, uid, sid, pid, pname, bid, bname, ptype, sm, sv, bt, national, area, ov FROM dmsp.dmsp_dimension_content LIMIT 0, 1000;
取出所有字段,时间2.250s,网络消耗0.578s
多次查询(改变limit条件避免缓存),时间变化不大。
结论:两者差别几乎可忽略。所以查询所有字段(或者大多数字段)的时候,大可select *来操作。如果某些不需要的字段数据量特别大,还是写清楚字段比较好,因为这样可以减少网络传输。
(1)SELECT *,需要数据库先 Query Table Metadata For Columns,一定程度上为数据库增加了负担。
但是实际上,两者效率差别不大。
(2)考虑到今后的扩展性。
因为程序里面你需要使用到的列毕竟是确定的, SELECT * 只是减少了一句 SQL String 的长度,并不能减少其他地方的代码。
综上:除平时练习使用,其他情况都不推荐使用 SELECT * FROM xxx
2、select count(1) 和select count(*)的区别?
一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的
假如表沒有主键(Primary key), 那么count(1)比count(*)快,
如果有主键的話,那主键作为count的条件时候count(主键)最快
如果你的表只有一个字段的话那count(*)就是最快的
count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计
3、怎么在sql语句中把int类型转为varchar
SELECT
CONCAT(123,
''
);
SELECT opi.pay_status FROM order_pay_info opi WHERE opi.origin_id = lpi.pay_id;
上面是以前的,pay_id是int类型的数,而origin_id是varchar类型,而order_pay_info的origin_id是加了索引的,但是上面的sql语句是用不到索引的。索引失效了。
解决的办法:
SELECT opi.pay_status FROM order_pay_info opi WHERE opi.origin_id = concat(lpi.pay_id,' ');
mysql里面如何用sql语句让字符串的‘123’转换为数字的123?
方法一:SELECT CAST('123' AS SIGNED integer);
方法二:SELECT CONVERT('123',SIGNED);
方法三:SELECT '123'+0;
4、MySQL 的两个特殊属性 unsigned与 zerofill
1 unsigned
unsigned 就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。看起来unsigned 是个不错的类型,尤其是用在自增或者没有负数的情况。但是在实际使用中会出现一些意外的情况。
查看https://www.cnblogs.com/Latiny/p/8058209.html;