mysql 性能优化
一、导致性能下降的原因:
1)sql语句写的太烂
2)索引失效
3)join关联太多
4)连接池、缓冲区参数配置不合理
二、数据库执行sql语句顺序
FROM <table_name?
ON <join_coindition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>
三、join方式
left join
SELECT * FROM student s LEFT JOIN teacher t
ON s.teacherId = t.id
right join
SELECT * FROM student s RIGHT JOIN teacher t
ON s.teacherId = t.id
inner join
SELECT * FROM student s INNER JOIN teacher t
ON s.teacherId = t.id
SELECT * FROM student s LEFT JOIN teacher t
ON s.teacherId = t.id
WHERE t.id IS NULL
A ∪ B
(注:UNION 合并两个查询结果集,并自带去重属性)
SELECT * FROM student s LEFT JOIN teacher t
ON s.teacherId = t.id
UNION
SELECT * FROM student s RIGHT JOIN teacher t
ON s.teacherId = t.id
非 ( A ∩ B )
SELECT * FROM student s LEFT JOIN teacher t
ON s.teacherId = t.id
WHERE t.id IS NULL
UNION
SELECT * FROM student s RIGHT JOIN teacher t
ON s.teacherId = t.id
WHERE s.id IS NULL
注:UNION 使用条件:
1)多条件查询语句的查询列数必须一致
2)多条件查询语句的查询的每一列的类型和顺序最好保持一致
2)自带去重属性,重复项会被直接过滤掉(若使用 union all 则可以查询出重复项)
四、SELECT * FROM user_info WHERE sex
LIKE ‘%%’; //数值为null的数据无法查出
SELECT * FROM user_info //查询出来所有的结果
五、mysql isnull 函数的返回值:0–false;1–true
六、通配符:% 代表多个字符;_ 代表单个字符
七、
isnull 只能判断是否为 null 值
<=> (安全等于)可以判断null值,也可以判断普通数值
八、
1)order by 后边可以跟 别名 也可以跟 表达式
2)order by 字段1,字段2 … //先以字段1排序,若字段2有多条数据,则这部分数据按照字段2的条件再进行排序
九、UTF-8 一个中文占3个字节,英文占1个字节
jdk 一个中文占2个字节,英文占1个字节
十、mysql的索引从 1 开始
注:limit(index,size) 中的index从0开始
十一、
mysql 两种删除方式的区别:
delete from tableName 一条一条删除,删除后可以回滚,自增长的值从断点开始
truncate table tableName 整表直接删除,删除后不能回滚。自增长的值从1开始。删除速度更快