我正在向数据库表添加一些 mysql 索引。大多数查询都是针对选择的。最好为每列创建一个单独的索引,或者为 province
、province
和 number
和 name 添加索引
。由于只有大约十几个选项,因此对省进行索引是否有意义?
select * from employees where province = 'ab' and number = 'v45g';
select * from employees where province = 'ab';
如果用法更改为更多插入,我是否应该删除除 number
之外的所有索引?
最佳答案
索引是一种数据结构,它将列的值映射到快速可搜索的树中。该树包含行索引,数据库可以使用该索引来快速查找行。需要知道的一件事是,某些数据库引擎会读取正负一堆行以利用磁盘预读。因此,每次索引读取实际上可能会读取 50 或 100 行,而不仅仅是 1 行。因此,如果您通过索引访问表的 30%,则可能会多次读取所有表数据。
经验法则: - 索引更独特的值,一棵有 2 个分支且两侧各有一半表格的树对于缩小搜索范围来说不太有用 - 使用尽可能少的索引 - 尽可能使用现实世界的示例数字。性能可以根据数据或数据库引擎的突发奇想动态变化,因此尝试并跟踪查询持续运行的速度非常重要(即:记录这一点,以防查询变慢)。但根据这些数据,您可以添加索引而不必盲目
好了,索引有很多种,单列索引和多列索引。当索引相互访问有意义时,您需要多个索引,通常在使用 where 子句进行优化时需要多个列。当您想要连接或者有“或”条件时,请考虑第一个。当您有条件并连续过滤行时,第二种更好。
在您的情况下,名称没有意义,因为 like 不使用索引。城市和数字确实有意义,可能作为多列索引。省份以及最后一个指数都可以提供帮助。
因此包含这些列的索引可能会有所帮助: (号码、城市、省份)
或者也尝试一下: (号码,城市)
关于mysql - 为选择建立索引 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32196085/