⑤ DISTINCT 字段需要创建索引
⑥ #### 多表 JOIN 连接操作时,创建索引注意事项
#首先,连接表的数量尽量不要超过 3 张
,因为每增加一张表就相当于增加了一次嵌套的循环,数量级增长会非常快,严重影响查询的效率。
#其次,对 WHERE 条件创建索引
,因为 WHERE 才是对数据条件的过滤。如果在数据量非常大的情况下,没有 WHERE 条件过滤是非常可怕的。
#最后,对用于连接的字段创建索引
,并且该字段在多张表中的类型必须一致
。比如 course_id 在 student_info 表和 course 表中都为 int(11) 类型,而不能一个为 int 另一个为 varchar 类型。
#⑦使用列的类型小的创建索引
#⑧使用字符串前缀创建索引
#⑨ 区分度高(散列性高)的列适合作为索引
#⑩ 使用最频繁的列放到联合索引的左侧
SELECT *
FROM student_info
WHERE student_id = 10013 AND course_id = 100;
#补充:在多个字段都要创建索引的情况下,联合索引优于单值索引
3. 哪些情况不适合创建索引
① 在where中使用不到的字段,不要设置索引
② 数据量小的表最好不要使用索引
③ 有大量重复数据的列上不要建立索引
#结论:当数据重复度大,比如高于 10%
的时候,也不需要对这个字段使用索引。
#④ 避免对经常更新的表创建过多的索引
#⑤ 不建议用无序的值作为索引
⑥ 删除不再使用或者很少使用的索引
⑦ 不要定义冗余或重复的索引 T 100; #5.212s
⑤ DISTINCT 字段需要创建索引
⑥ #### 多表 JOIN 连接操作时,创建索引注意事项
#首先,连接表的数量尽量不要超过 3 张
,因为每增加一张表就相当于增加了一次嵌套的循环,数量级增长会非常快,严重影响查询的效率。
#其次,对 WHERE 条件创建索引
,因为 WHERE 才是对数据条件的过滤。如果在数据量非常大的情况下,没有 WHERE 条件过滤是非常可怕的。
#最后,对用于连接的字段创建索引
,并且该字段在多张表中的类型必须一致
。比如 course_id 在 student_info 表和 course 表中都为 int(11) 类型,而不能一个为 int 另一个为 varchar 类型。
SELECT s.course_id, NAME, s.student_id, c.course_name
FROM student_info s JOIN course c
ON s.course_id = c.course_id
WHERE NAME = ‘462eed7ac6e791292a79’; #0.001s
DROP INDEX idx_name ON student_info;
SELECT s.course_id, NAME, s.student_id, c.course_name
FROM student_info s JOIN course c
ON s.course_id = c.course_id
WHERE NAME = ‘462eed7ac6e791292a79’; #0.227s
#⑦使用列的类型小的创建索引
#⑧使用字符串前缀创建索引
#⑨ 区分度高(散列性高)的列适合作为索引
#⑩ 使用最频繁的列放到联合索引的左侧
SELECT *
FROM student_info
WHERE student_id = 10013 AND course_id = 100;
#补充:在多个字段都要创建索引的情况下,联合索引优于单值索引
3. 哪些情况不适合创建索引
① 在where中使用不到的字段,不要设置索引
② 数据量小的表最好不要使用索引
③ 有大量重复数据的列上不要建立索引
#结论:当数据重复度大,比如高于 10%
的时候,也不需要对这个字段使用索引。
#④ 避免对经常更新的表创建过多的索引
#⑤ 不建议用无序的值作为索引