在学校里学SQL,也实际操作过,觉得还是掌握的不错的。这两天在公司一用,缺点就暴露了。
以前做的应用,数据量有个几千上万就不错了,写的SQL语句也大多比较简单,跑跑都不成问题。这两天公司有张数据表A的数据量已经达到24万,我要做的是将这张表A的数据LEFT JOIN另外一张表B,在mysql客户端上一跑,没有反应,等了好几分钟都出不来结果,只能Ctrl+C。看了好久都看不出SQL语句错在哪里,自己另外建了两个表作实验,也没有问题,很快就能显示结果。后来在同事的提醒下,原来是B表关联的字段没有加index,加上index之后果然很快就显示结果了。
平时自己在实验SQL语句的时候大多将精力集中在SQL语句是否正确,而忽略了SQL语句的性能,好比今天用子查询来找数据,结果发现还不如分成两条SQL语句来的效率高呢。书本上将的金玉良言大多是很有用的,但是也有部分在实际应用中是必须违反的,比如几大范式要避免冗余,但是实际应用中还是会通过增加冗余来提高查询效率。
看来应该好好在研究一下数据库的性能问题了呢。