有些查询只需扫描索引,无需扫描数据(SELECT id, user FROM table WHERE id = 1234)
过滤用户提交SQL,防止注入
不用/少用子查询,改造成连接(JOIN)
不用/少用FOR UPDATE、LOCK IN SHARE MODE,防止锁范围扩大化
SQL中不用/少用函数,可能造成额外开销或导致无法使用索引
索引规范
显式指定自增 int/bigint unsigned not null 作为主键
尽量不用外键
合理利用覆盖索引,但字段尽量不超过5个
长字符字段使用前缀索引
及时删除冗余索引
选择适当的索引顺序,选择性高条件靠前
基数(Cardinality)很低的字段不创建索引
采用第三方系统实现text/blob全文检索
不在索引列运算
SELECT * FROM table_name WHERE id + 1 = 6630913 SELECT * FROM table_name WHERE id = 6630913-1 SELECT * FROM table_name WHERE to_days(current_date) – to_days(date_col) <= 10