使用联接查询MySQL进行索引



我对SQL还很陌生,我正在努力理解索引。如果可以的话,请帮忙!

我使用的是MySQL 8.0以及对这些表的联接查询和索引。我有两张慈善和Metro的桌子,有超过150万条和7000条记录,我正在尝试索引并应用连接。

注意:我已经有了这两个表的主键。

create table charitable (
EIN bigint primary key not null,
NAME Varchar(255) not null,
ICO varchar(255) null,
STREET varchar(255) not null,
CITY varchar(255) not null,
STATE varchar(255) not null,
ZIP varchar(255) not null, 
GROUP_NO int not null,
SUBSECTION Int not null,
AFFILIATION Int not null,
CLASSIFICATION Int not null,
RULING int not null,
DEDUCTIBILITY Int not null,
FOUNDATION Int not null,
ACTIVITY bigint not null,
ORGANIZATION Int not null,
STATUS Int not null,
TAX_PERIOD varchar(255) null,
ASSET_CD Int not null,
INCOME_CD int not null,
FILING_REQ_CD int not null,
PF_FILING_REQ_CD int not null,
ACCT_PD int not null,
ASSET_AMT varchar(255) null,
INCOME_AMT varchar(255) null,
REVENUE_AMT varchar(255) null,
NTEE_CD varchar(255) null,
SORT_NAME varchar(255) null
);`
create table Metro(
City varchar(255) not null,
State varchar(255) not null,
MMSA varchar(255) null,
MMSA_type varchar(255) null,
CBSA varchar(255) null,
city_St varchar(255) not null,
metro_city varchar(255) null,
primary key (City, State)
);

这是查询。

select co.name, mc.Metro from charitable as co
join Metro as mc
on co.city=mc.city and co.state = mc.state;

因此,我对Metro(州、市(应用了唯一索引,对慈善机构(州(应用了简单索引,这恰好在Join语句中使用。

这种索引有助于将提取性能从18.047秒降低到17.85秒。但是,我不明白索引是如何处理慈善机构的重复值的。例如,慈善表格中有5000多条(州、市(组合的重复记录。第二个疑问是索引是如何与联接查询一起工作的

谢谢你的帮助!

可能Metro的PRIMARY KEY(City, State)将用于JOIN。为CCD_ 4添加CCD_;覆盖";。

使用合理的值,而不是盲目使用255。

金额不要使用VARCHAR;算术和比较不好用。

由于您正在获取150万行,因此不应该期望它非常快。

如果这不是完整的SELECT,那么这就不是完整的答案。

最新更新