《高性能mysql第三版阅读笔记》

20170425

*本来打算读SICP,但是最近对mysql索引的不了解严重影响了开发效率, 还是先读这本吧, 中文版500多页...任务还是挺重.

#Insert into a MySQL table or update if exists

http://stackoverflow.com/questions/4205181/insert-into-a-mysql-table-or-update-if-exists
INSERT INTO table(id,name,age) VALUES(1,"A",19) ON DUPLICATE KEY UPDATE name="A",age=19

ON DUPLICATE KEY UPDATE可以实现有则更新无则插入!!

#前三章讲测试和服务器性能,貌似CAT已经能很完美去解决大部分问题了.

#VARCHAR(5)和VARCHAR(20)储存同一个内容时候,空间占用一样,但是更长的列消耗更多地内存.

#FROM_UNIXTIME(UNIX_TIMESTAMP(addTime)) timestamp格式和unix格式的转换函数

#第5章 创建高性能的索引 不能跳过索引中的列; 如果查询中某个列是范围查询,则其右边所有列都无法使用索引优化查找.

很棒的 BTree和B+Tree详解

#对url这样的长字段索引可以加CRC32哈希索引,大大加快索引速度

#5.3.1查询中的列必须是独立的,独立放在比较符号一端,否则无法用索引,常见错误,如

WHERE TO_DAYS(CURRENT_DATE)- TO_DAYS(date_col) <=10;而且也不能套上TO_DAYS函数

#5.4.1 sex的选择性很低,但是如果查询中经常用到,就应该作为索引的前缀列,如果某个查询没用到sex列, 可以在where里加AND SEX in ('m','f');

6.4 mysql中将IN()列表中的数据先进行排序,再通过二分查找,所以是个logn复杂度的操作,比OR(n复杂度)要快!

update inner join用生成表的形式绕过update 不能select自身表的限制

查找不同颜色球的数量:Select count(color = 'blue' or null) as blue, count(color = 'red' or null) as red From items;

-----------------------------------------------------------------

20170506 读到第七章,感觉之前的索引介绍确实对我收益匪浅,对工作很有帮助.mysql功能很强大,但有些地方优化不够,不够"傻瓜"化,比如DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询. 就是子查询.子查询的执行效率居然受制于外层查询的记录数. 还不如用join或者拆成2个查询. 不过,5.6里都有了很多优化. 即使这优化早该来临.

-------------------------------------------------------------------

8.7.1 BLOB和TEXT都是BLOB类型,服务器不能在内存临时表中存储BLOB值,只能在磁盘中创建,所以效率很低. 可以通过SUBSTRING()函数将值转换为VARCHAR,或者使用基于内存的文件系统(GNU/Linux上市tmpfs)

分区partition看上去简单强大,但是都没搜到多少文章。一般partition用时间做range

RAID独立磁盘阵列,又是个聪明的发明


20170515

后面一些复制运维什么的对我来说暂时还没用,也不是很难,没有细看... 最后作者推荐了Sphinx作为全文索引引擎, 我搜了下,solr似乎是个更好的选择,我们公司用的也是solr,基于lucene. 四周看完,感觉效率还挺高.

你可能感兴趣的:(《高性能mysql第三版阅读笔记》)