SQL 表结构及索引
SQL 表结构及索引
-
新建数据表应注意,不要在表名和字段名中使用 SQL 保留字,虽然可以通过在名称两端加```字符的方式规避错误,但这可能会给未来的程序维护带来麻烦;
-
在需要更新(而非只添加)的数据表中存储字符串数据的字段,长度不超过
200
字节时,请务必使用char
类型,超过200
字节时,请务必使用text
类型。使用varchar
类型会导致表的行存储变成变长行,严重降低行数据的更新速度,但如果该数据表在业务上只实现SELECT
和INSERT
操作,则不必介意; -
任何时候,在查询的
JOIN
子句中出现用于拼接的列,必须针对该列
创建索引。 -
在查询的
WHERE
子句中出现的条件,应针对该条件创建复合索引,示例如下: -
查询语句类似
SELECT * FROM T1 WHERE {C1 = a | C1 IN (...) | C1 | C1 BETWEEN a, b}时,应为 C1 列创建索引
-
查询语句类似
SELECT * FROM T1 WHERE C1 = a AND C2 = b时,应为 C1 和 C2 列创建复合索引,即ADD KEY C1-C2-idx (C1, C2)
-
子查询的情况以此类推
-
请尽量避免对字符串类型字段进行通配符在前的
LIKE
比对,此类比对无法使用索引,请尽可能将此类功能以全文检索方式实现,如确需此类比对,请务必将其它的匹配条件置于此条件之前
,示例如下: -
以下写法是错误的
SELECT * FROM T2 WHERE C1 LIKE '%abc%' AND C2 IN (...)
-
以下写法是正确的
SELECT * FROM T2 WHERE C2 IN (...) AND C1 LIKE '%abc%'
实际上,如 5.1 所示的简单查询,数据库引擎会自动优化为 5.2的方式,但考虑到 JOIN 查询和嵌套子查询等引擎难以优化的情况,请务必养成此良好的书写风格。
来自公司近二十年工作经验服务器大神
给予我们菜鸟的一些分享。