我多年来一直在使用MySQL,主要是在去年左右的小型项目上。我不确定这是语言的本质还是我缺乏真正的教程,让我感到不确定我写的是否是用于优化目的和缩放目的的正确方法。
虽然在PHP中自学成才,但我非常确定自己和我编写的代码,很容易将其与其他人比较等等。
使用MySQL,我不确定是否应该(以及在什么情况下)使用INNER JOIN或LEFT JOIN,我也不知道它具有大量的功能。虽然我已经为处理了数千万条记录的数据库编写了代码,但我不知道它是否是最佳的。我经常发现一个小的调整会使查询的时间少于原始时间的1/10 ......但我怎么知道我当前的查询也不慢?
我希望在这个领域对优化数据库和可扩展的能力充满信心。使用不是问题 - 我每天都会以多种不同的方式使用它。
所以,问题是,路径是什么?读书?网站/教程?建议?
答案 0 :(得分:5)
成为某事物专家的唯一方式是经验,通常需要时间。还有一个优秀的导师比你更好地教你缺少什么。问题是你不知道你不知道什么。
答案 1 :(得分:5)
EXPLAIN是你的朋友。如果您学习使用此工具,则应该能够非常有效地优化查询。
- 扫描MySQL手册并阅读Paul DuBois的MySQL书。
- 使用EXPLAIN SELECT,SHOW VARIABLES,SHOW STATUS和SHOW PROCESSLIST。
- 了解查询优化器的工作原理。
- 优化您的表格格式。
- 维护你的表(myisamchk,CHECK TABLE,OPTIMIZE TABLE)。
- 使用MySQL扩展来更快地完成任务。
- 如果您发现需要某些功能,请编写MySQL UDF功能 功能很多。
- 如果您不需要,请不要在表级或列级使用GRANT 它。
http://dev.mysql.com/tech-resources/presentations/presentation-oscon2000-20000719/index.html
答案 2 :(得分:2)
研究和经验 - 如果您没有项目来保证研究,请制作它们。制作三张包含相关数据的表格,并制作方案。
E.g。
制作电影表格数据
制作用户表
为用户制作评级表
花时间学习联接如何工作,如何在一个查询中获取特定评级范围的电影,如何搜索电影表(如正则表达式) - 如上所述,使用说明来查看不同的事物如何影响速度。做一天吧;我向你保证 处理它会大大增加。
如果您仍然在为案例场景而苦苦挣扎,请先在SO上查找问题,然后亲自尝试这些场景。
答案 3 :(得分:1)
我不知道麻省理工学院开放的课件是否有关于数据库的内容......哇,你知道吗?他们这样做:http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-830Fall-2005/CourseHome/
我建议仅作为一个基于MIT声誉的来源。如果您可以从大学参加正式课程,您可能会觉得很有帮助。对基础离散数学/逻辑的充分理解肯定不会造成伤害。
答案 4 :(得分:1)
正如其他人所说,时间和实践是唯一真正的方法。
更实际的是,我发现EXPLAIN为我个人创造了奇迹。学习阅读它的输出可能是我能够编写高效查询的最大单一飞跃。
我发现真正有用的第二件事是SQL Tuning by Dan Tow,它描述了一种提取性能的相当正式的方法。这有点牵扯,但在很多情况下效果很好。如果不出意外,它将使您更好地了解联接的处理方式。
答案 5 :(得分:0)
从类似这样的课开始:https://www.udemy.com/sql-mysql-databases/
然后使用您学到的知识来创建和管理大量SQL数据库并运行查询。达到专家水平实际上是关于实践。但是当然你需要在练习之前先学习它们。