cuốn sách gpt4 ai đã làm

mysql - 在固定值很少但值占总行数不到 25% 的列上建立索引

In lại Tác giả: Walker 123 更新时间:2023-11-29 01:44:14 25 4
mua khóa gpt4 Nike

我在表中有一个字段 table_name,它只能有 20 个不同的值。表中的总记录大约有几万行。如果我做这样的查询:

SELECT * FROM table WHERE table_name = 'adasd'; 

返回的记录最多为总行数的 25%。大多数情况下,我只得到总记录的 10%。是否有索引字段 table_name 的范围?我听说要使索引运行良好,它需要该字段中的值是唯一的或接近它。就我而言,它一点也不独特。但我还听说,如果返回的行数少于总行数,则很适合建立索引。

tôi phải làm gì?

câu trả lời hay nhất

不,它们不必是唯一的就可以从使用索引中获益,但是请花一些时间考虑一下 DBMS 在处理查询时做了什么:

全表扫描 - 顺序读取数据(即很少的查找操作)

索引查找 - 在索引上进行几次查找以找到所选数据的开始,然后顺序读取(少量查找)以识别基础表中的行,然后进行大量查找以从表中获取行

寻找是昂贵的。

(全表扫描的次要影响是它们更容易将热数据从缓存中清除 - 但您应该首先解决主要问题)。

在这种情况下,如果索引存在,DBMS 不太可能使用该索引,即使使用了,也可能比全表扫描慢。作为一个(非常)粗略的经验法则,只有当谓词标识的行少于 5% 左右时,您才会从索引中获益(但它会因索引和数据的相对大小而异) ).

即不要费心单独在这个字段上添加索引。

我认为您可能会受益于花一些时间思考为什么需要运行返回这么多行的查询?

关于mysql - 在固定值很少但值占总行数不到 25% 的列上建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11205093/

25 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress