Skip to content

Commit 9b2506c

Browse files
committed
更新SQL优化
1 parent 97c7aa4 commit 9b2506c

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

MD/数据库-MySQL.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
* 不用NOT IN,因为会使用全表扫描而不是索引;不用IS NULL,NOT IS NULL,因为会使索引、索引统计和值更加复杂,并且需要额外一个字节的存储空间。
2424

2525
问:有个表特别大,字段是姓名、年龄、班级,如果调用`select * from table where name = xxx and age = xxx`该如何通过建立索引的方式优化查询速度?
26-
答:由于mysql查询每次只能使用一个索引,如果在name、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(name, age, class)的复合索引,那么其实相当于创建了(name, age, class)、(name, age)、(name)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。其次还要考虑该列的数据离散程度,如果有很多不同的值的话建议放在左边。
26+
答:由于mysql查询每次只能使用一个索引,如果在name、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(name, age)的复合索引,那么其实相当于创建了(name, age)、(name)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。其次还要考虑该列的数据离散程度,如果有很多不同的值的话建议放在左边,name的离散程度也大于age
2727

2828
问:max(xxx)如何用索引优化?
2929
答:在xxx列上建立索引,因为索引是B+树顺序排列的,锁在下次查询的时候就会使用索引来查询到最大的值是哪个
@@ -65,6 +65,10 @@
6565
1. 索引需要占物理空间。
6666
2. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
6767

68-
#### 如何选择合适的列建立索引
68+
#### 优化
69+
如何选择合适的列建立索引?
70+
6971
1. WHERE / GROUP BY / ORDER BY / ON 的列
70-
2. 离散度大(不同的数据多)的列
72+
2. 离散度大(不同的数据多)的列使用索引才有查询效率提升
73+
3. 索引字段越小越好,因为数据库按页存储的,如果每次查询IO读取的页越少查询效率越高
74+

0 commit comments

Comments
 (0)