在mysql表上创建索引

我在mysql数据库中有一个名为data的表.该表很大,有大约50万条记录,这个数字将增长到100万.每个记录包含大约50列,其中大多数包含varchars.

数据表使用非常频繁.实际上,大多数查询都访问该表.大约有50个用户正在同时读取和写入数据.用户上载和检查其数据的系统负荷很高,因此最多可以停止一两个小时.

经过一些研究.我发现几乎所有具有“ where”子句的选择查询都使用表中的四个字段之一.该字段是:isActive,国家/地区,州/城市-全部为int格式.哪里可以是

    where isActive = {0|1}

要么

    where isActive = {0|1} and {country|state|city} = {someIntValue}

要么

    where {country|state|city} = {someIntValue}

最后一件事是该表除主ID之外没有任何索引.

在表格增长到当前大小之后,我遇到了一些性能问题.

所以,我的问题是,如果我在isActive,国家,州和城市列上创建索引,性能会提高吗?

UPD:我刚刚在该字段之一上创建了一个索引,WOW!查询将立即执行.感谢大伙们.

解决方法:

我认为索引isActive字段不是一个好主意,因为它会在添加/更新/删除时造成索引开销,但是在读取时它只会将数据分为两个块(1和0),因此它将没有真正的帮助.

编辑:发现这一点来解释以上几点:
Is there any performance gain in indexing a boolean field?

对于其他树列,我建议您在大多数用户离线时(在夜间或午餐时间)进行基准测试,并查看它如何影响性能,但是我认为这确实会有所帮助.

编辑:ypercube发出了一些有趣的用例,其中我有关索引布尔字段的答案不相关,请检查注释.

上一篇:mysql数据库上所有索引的大小


下一篇:mysql-添加FULLTEXT索引:没有太大区别,它将对较旧的数据进行索引吗?