SQL技能大突破!改掉这10个错误习惯!

SQL技能大突破!改掉这10个错误习惯!

作为一名在Python和数据分析方面有超过十年经验的数据工程师,我在SQL方面有着丰富的经验。它是一种处理数据库的强大语言,多年来,我学到了很多关于如何有效使用它的技巧。回顾过去,随着我在SQL方面的技能提升,我已经放弃了一些习惯和做法。

在这篇文章中,我将分享我使用SQL的时候不会再做的10件事,以及我在此过程中学到的经验教训。如果你想了解更多关于SQL的相关内容,可以阅读以下这些文章:
优化SQL查询的10大技巧!
3个能瞬间提升查询速度的SQL优化技术
实战项目必备的5个高级SQL技巧!
高级SQL技巧与窍门:数据分析师必备!

1.忽略了索引的重要性

在我学习SQL的早期,我并没有充分认识到索引对查询性能的影响。我过去常常在编写查询时不考虑对相关列的索引的需要。因此,我的查询通常需要更长的时间来执行,特别是在大型数据集上。

以下是我学到的:索引在优化查询性能方面起着至关重要的作用。通过识别频繁访问的列并添加适当的索引,可以显著加快查询速度。

例如,考虑下面的代码片段:

-- Before
SELECT * FROM employees WHERE name = 'John Doe';

-- After
CREATE INDEX idx_employees_name ON employees (name);
SELECT * FROM employees WHERE name = 'John Doe';

在”name”列上添加索引可以带来明显的差异,尤其是当表中包含大量行时。

2. 完全依赖SELECT *

在学习SQL的早期阶段,我经常使用SELECT *语法从表中检索所有列。虽然这样做是有效的,但我没有意识到这种方法的潜在缺点。

以下是我学到的:选择所有列可能导致不必要的数据检索,特别是在处理大型表时。最好在SELECT语句中明确指定所需的列,这不仅提高了查询性能,而且使代码更具可读性和可维护性。

-- Before
SELECT * FROM employees;

-- After
SELECT name, age, department FROM employees;

通过明确指定所需的列,可以减少传输的数据量并提高查询的效率。

3.忽略查询优化技巧

当我开始使用SQL时,我经常在编写查询时不考虑优化技术。我没有过多关注查询执行计划或分析性能瓶颈。

以下是我所学到的:了解查询优化技术可以极大地提高查询的效率。诸如JOIN优化、子查询优化和正确使用索引等技巧可以在查询性能上产生显著的差异。

例如,以下代码片段:

-- Before
SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE name = 'Sales');

-- After
SELECT employees.*
FROM employees
JOIN departments ON employees.department_id = departments.id
WHERE departments.name = 'Sales';

通过使用JOIN而不是子查询,我们可以极大地提高查询的性能。

4. 忽视错误处理

在早期,我没有对SQL代码中的错误处理给予足够的重视。我经常假设一切都会按照预期进行,而没有考虑到可能出现的潜在问题。

以下是我所学到的:适当的错误处理对于健壮的SQL代码至关重要。了解和处理潜在错误有助于防止意外行为,并确保数据库操作的可靠性。

-- Before
SELECT * FROM employees WHERE id = 1000;

-- After
BEGIN TRY
    SELECT * FROM employees WHERE id = 1000;
END TRY
BEGIN CATCH
    -- Handle the error here
    PRINT 'An error occurred while fetching the employee record.';
END CATCH;

通过使用像TRY…CATCH这样的结构化错误处理结构,你可以优雅地处理错误,并在错误发生时采取适当的操作。

5. 不使用存储过程

在我的SQL之旅的早期,我经常直接在应用程序代码中编写特别的查询。我没有意识到存储过程的必要性,也没有充分利用它们的优势。

以下是我所学到的:存储过程提供了很多好处,包括更好的代码组织、改善性能和增强的安全性。通过将SQL逻辑封装到存储过程中,可以简化应用程序开发、减少网络流量并防止SQL注入攻击。

-- Before
-- Application code with inline SQL queries

-- After
-- Stored procedure
CREATE PROCEDURE GetEmployeeDetails
    @employeeId INT
AS
BEGIN
    SELECT * FROM employees WHERE id = @employeeId;
    END;

通过使用存储过程,你可以集中管理SQL逻辑,使其更易于维护和管理。

6. 忽略正确的数据类型处理

当我第一次开始使用SQL时,我通常不太注意数据类型。我对所有东西都使用了VARCHAR这样的通用数据类型,没有考虑其含义。

以下是我所学到的:正确的数据类型处理对于数据完整性和查询性能至关重要。通过为列和参数选择适当的数据类型,可以确保准确的数据表示、提高存储效率并防止数据转换问题。

-- Before
CREATE TABLE employees (
    name VARCHAR(100),
    age VARCHAR(10),
    salary VARCHAR(20)
);

-- After
CREATE TABLE employees (
    name NVARCHAR(100),
    age INT,
    salary DECIMAL(10, 2)
);

通过选择合适的数据类型,可以提高数据质量、存储效率和查询性能。

7. 忽略数据一致性约束

在早期,我通常不会在SQL代码中强制执行数据一致性约束,我假定应用层会处理它。

以下是我所学到的:在数据库级别执行数据一致性约束对于维护数据完整性至关重要。通过使用主键、外键、唯一约束和检查约束,你可以确保数据保持一致和准确。

-- Before
-- No data consistency constraints

-- After
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    CONSTRAINT fk_employees_departments FOREIGN KEY (department_id) REFERENCES departments (id)
);

通过定义适当的约束,可以防止插入或更新无效数据,从而确保数据的完整性。

8. 忽视数据库安全

在我的SQL之旅早期,我没有对数据库安全性给予足够的关注。我经常认为默认设置已经足够了,没有采取主动措施来保护数据库。

以下是我所学到的:数据库安全性对于保护敏感数据和防止未经授权的访问至关重要。通过遵循诸如限制用户权限、加密敏感数据和定期修补数据库软件等最佳实践,你可以保护数据免受潜在威胁。

-- Before
-- Default user with high privileges

-- After
CREATE USER limited_user WITH PASSWORD 'strong_password';
GRANT SELECT ON employees TO limited_user;

通过创建具有适当特权的用户并实现安全措施,你可以将数据泄露和未经授权访问的风险降至最低。

9. 不注释SQL代码

在我的SQL之旅早期阶段,我很少注释我的SQL代码,我以为代码会说明一切。

以下是我所学到的:正确的注释对于理解和维护SQL代码至关重要。通过添加注释、记录查询的目的和提供上下文,你可以使自己和其他人更容易理解代码及其意图。

-- Before
SELECT * FROM employees WHERE age > 30;

-- After
-- Get employees above the age of 30
SELECT * FROM employees WHERE age > 30;

通过注释SQL代码,可以提高代码的可读性,并使其在将来更容易进行故障排除和维护。

10. 不投资于持续学习

在我的SQL之旅早期,我经常依赖于我已经获得的知识,而没有积极地寻找新的学习机会。

以下是我所学到的:SQL是一种不断发展的语言,重要的是要跟上新特性、最佳实践和性能优化技术的步伐。通过不断学习和探索新资源,你可以扩展SQL技能,并在快速变化的数据环境中保持领先地位。

我认为我在提升SQL技能过程中的关键,是意识到总有改进的空间。通过发现和放弃过时的做法,了解优化技术,保持好奇心,我们可以充分发挥SQL的全部潜力,成为更熟练的数据工程师。

如果你也有类似的经历,请继续探索、不断学习并不断完善你的SQL技能。祝你查询愉快!

注意:本文中提供的代码片段仅用于说明目的,可能并不代表上述场景的完整和优化的解决方案。始终考虑你自己用例的特定需求和最佳做法。

感谢你花时间阅读,希望这篇文章对你有所帮助。你还可以订阅我们的YouTube频道,观看大量大数据行业相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Gabe A, M.Sc
翻译作者:过儿
美工编辑:过儿
校对审稿:Chuang
原文链接:https://levelup.gitconnected.com/10-things-i-stopped-doing-after-i-became-more-skilled-in-sql-3e87dbb00265