【发布时间】:2019-12-06 02:17:39
【问题描述】:
我想查询一个表,该表具有列 a、b、c、d 的索引。 如果在 where 子句中过滤列 a、b 和 c,索引是否足够好?还是应该只为树字段(a、b 和 c)创建一个新索引?
alter table myTable add index (a,b,c,d)
...
SELECT *
FROM myTable
WHERE a = ? AND b = ? AND c = ?
【问题讨论】:
-
对 a,b,c 完美,但对 b,c,d 没用
-
@Strawberry,请注意解释一下。
-
@AnkitBajpai 手册详细介绍了这一点
-
索引使用被保留,这意味着
index (a,b,c,d)可以处理WHERE a = ?,WHERE a = ? AND b = ?,WHERE a = ? AND b = ? AND c = ?,WHERE a = ? AND b = ? AND c = ? AND d = ?有效..一个技巧可以使用WHERE a >= 'a' AND b = ?或@987654329 @ 例如,当您不知道要搜索的值时 但它会导致全索引扫描效率较低但很可能比全表扫描更快,因为索引文件通常是(比表格文件更小。 -
(a, b, c, d)上的索引明显大于(a, b, c)上的索引。这可以决定有多少索引适合内存,以及在执行期间需要用磁盘中索引的其他部分替换内存中的多少数据。磁盘操作成本高昂,因此使用较小的索引可能会最大程度地减少从磁盘的读取,这会带来好处。
标签: mysql sql database indexing