mysql 笔记

1. 对于VACHAR类型字段 MAX(feild)不能正确得到结果。应:MAX(feild+0)

2. sql server中的TOP N,mysq不支持,可以使用limit offset length。

select * from table_name limit 0 100;

select * from table_name limit 100;

3. show processlist,查看当前执行的的sql线程,非常实用。可以通过kill id来终止指定线程

4. 多个客户端并发大量查询会导致mysql负荷越来越大,查询速度越来越慢。msyql+ memcached方案?

5. 对于大量并发insert操作,可以实用"insert delayed into",仅对MyISam引擎表支持

6. 对表可以进行锁操作:LOCK TABLES table1,table2 READ; UNLOCK TABELS;

7,. API函数mysql_data_seek(res,offset), offset越大,越耗时,在几千万数据的res中,若要重复使用该函数,注意优化。

8, 查看表状态,show status from table_name;

9, 创建索引:
CREATE INDEX ON table_name index_name(filed_name);

ALTER TABLE table ADD INDEX  index_name(filed_name);

10 查看索引:

show index from table_name

11 调试

show warnings;

show errors;

 

12.Mysql UDF:

name()

{

}

name_init()

{

}

name_deinit()

{

}


13.Mysql Full-text,全文检索:

my.cf 重要参数:

ft_min_word_len,默认为4,最小匹配分词大小

ft_stopword_file ,如ft_stopword_file=""可以关闭掉mysql默认的stopwords

修改后参数需要重启mysql 和 重建full-text索引,一定要注意哦

 

14.一些高级语法

 insert into A(name,tel,address) select name,tel,address from B where id=10;

update poi A INNER JOIN poi_tmp B ON A.id=B.id set A.name=if(B.name is null,A.name,B.name);

update (select mac_id,count(*) as sum from nav_business) A INNER JOIN nav_target B ON A.mac_id=B.mac_id set B.sevice_times=A.sum;

delete poi.*,poi_tmp.* from poin LEFT JOIN poi_tmp USING(id) where id=10

 

 

15. select可以加互斥锁

如有些情况需要先select判断其条件后,再作update操作。 在多线程情况下,这样是不安全的。除非保证select和update整个过程是原子的。

 这里我们使用select  ... for update开始加锁,和随后的update操作放在同一个事务中,最后commit(或者rollback)释放锁,这个过程是原子的,其他事务会因为锁而阻塞。

阻塞情况可以查看:

select * from information_schema.innodb_trx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值