好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
数据库引擎
外键约束或者事务处理对于数据完整性是非常重要的,但MyISAM都不支持这些。另外,当有一条记 录在插入或者更新时,整个数据表都被锁定了,当使用量增加的时候这会产生非常差的运行效率。
MyISAM 和 InnoDB的选择
1. 如果你的网站以 读和写为主,同时对事务性要求不高,建议使用MyISAM
2. 如果你的网站对事务性高,比如(转账,付款…)这个表建议使用InnoDB
在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。
1. 在经常查询的字段上加索引, 不经常查询的就不加索引
2. 唯一性差的字段不要加索引.
3. 在join的字段要加索引,如果两张表的join的字段都没有索引的话,每个表的数据量都是1万条,那join的耗时就是10000*10000次,会非常的慢,以至于把数据库的cpu占满
创建索引是以insert开销为代价的
1. 如果是多列索引,只有使用到左边的字段,才会使用索引
2. like 语句 ‘%aa’ 是不会用索引
3. or 要小心使用.是不会用索引
避免扫全表的操作
避免困难的正则表达式
MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。
例如:SELECT * FROM customer WHERE zipcode LIKE “98_ ”
怎么定位慢查询
配置多少秒为慢查询,日志记录在哪里
show variables like 'long_query_time';
最大连接数
show variables like '%max_connections%';
当前连接数
mysql> show status like 'Threads%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 58 |
| Threads_connected | 57 | ###这个数值指的是打开的连接数
| Threads_created | 3676 |
| Threads_running | 4 | ###这个数值指的是激活的连接数,这个数值一般远低于connected数值
+-------------------+-------+