mysql - 为选择建立索引 mysql 表

标签 mysql sql

我正在向数据库表添加一些 mysql 索引。大多数查询都是针对选择的。最好为每列创建一个单独的索引,或者为 provinceprovincenumbername 添加索引。由于只有大约十几个选项,因此对省进行索引是否有意义?

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/

相关文章:

php - 将数据库表中某一列的所有值相加

sql - 是否可以在一个表的一列中连接两个或多个具有ID的表?

mysql - rails : Find all records matching condition for any of the associated objects

MYSQL innoDB SELECT FOR UPDATE with LEFT JOIN

mysql - 单表内SQL时间差

php - 如何从给定的行号开始选择 MySQL 中的行?

python - 具有子集属性的 SQL 查询过滤器

mysql - 连接本地和远程 MYSQL

mysql - PHP MySQL 选择所有匹配的行并回显另一个表的行

SQL查询帮助,条件连接