常用命令
mysql -u username -p
USE mydatabase;
SHOW DATABASES;
CREATE DATABASE newdatabase;
数据库的规约
包括:
- 建表规约;
- 索引规约;
- SQL与ORM映射规约;
Explain技巧
explain的结果代表的含义需要比较清楚。参数中,type比较重要,这个表示如何访问数据的,另外就是extra,可以识别是否需要优化Sql。
这里讲讲extra中的三种类型:
- using filesort 使用文件排序,这个效率比较慢
- using index 使用索引,这个比较快
- using temporary 使用临时表来保存中间结果,在使用order by , group by 的时候会出现
为什么禁止使用三表join
在数据库操作中,并没有一个硬性规定说超过三张表就禁止进行JOIN
操作。实际上,数据库设计和查询的复杂性可以根据实际需求进行设计。然而,存在一些实践和性能考虑,可能会限制在单个查询中使用大量表的JOIN
操作:
-
性能问题:随着
JOIN
操作的表数量增加,查询的执行时间可能会显著增加。这是因为数据库需要匹配更多的行,这可能导致大量的计算和数据传输。 -
复杂性:多表
JOIN
查询的逻辑可能变得非常复杂,难以理解和维护。这可能导致查询难以调试和优化。 -
可读性:过多的表参与
JOIN
会使得SQL查询变得难以阅读和理解,这可能会影响团队协作和代码的可维护性。 -
数据冗余和规范化:如果一个查询需要连接很多表,这可能表明数据库设计中存在数据冗余或者规范化不足的问题。
-
索引效率:多表
JOIN
可能使得数据库的索引效率降低,因为索引需要跨越更多的表。 -
事务管理:涉及多表的
JOIN
可能需要更大的事务日志,这可能会影响数据库的事务管理性能。 -
锁定和并发:多表
JOIN
可能会增加数据库锁定的复杂性,影响并发性能。
在实际应用中,如果确实需要进行多表JOIN
,可以采取一些策略来优化性能,如:
- 使用合适的索引。
- 优化查询逻辑,减少不必要的
JOIN
。 - 分析查询计划,找出性能瓶颈。
- 使用子查询或临时表来简化复杂的
JOIN
操作。
总之,超过三张表的JOIN
操作并不是被禁止的,但是需要谨慎处理,以避免潜在的性能和维护问题。