热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在mysql中明智地应用索引-Howtojudiciouslyapplyindexesinmysql

Indexesaremostlyusedtoimprovethespeedofdatabasequery,andmostpreferablyappliedonthep

Indexes are mostly used to improve the speed of database query, and most preferably applied on the primary key of the table , but however this may not be the case always.

索引主要用于提高数据库查询的速度,最优选地应用于表的主键,但是这可能并非总是如此。

I want to know the decisions that go into applying an index and thus achieving the best results possible.

我想知道应用索引的决策,从而实现最佳结果。

For not my knowledge for indexes is limited to applying it to the primary key only , in what circumstances would i apply it otherwise

因为我对索引的了解仅限于将其应用于主键,否则我将在何种情况下应用它

1 个解决方案

#1


2  

As widely as they are used, an index is best used on any columns that are used often in both a statement's WHERE clause and ORDER BY clause.

与使用它们一样广泛,索引最好用于语句的WHERE子句和ORDER BY子句中经常使用的任何列。

Take for instance, the following table:

举个例子,如下表:

CREATE TABLE `people` (
    `id` int,
    `name` varchar(255),
    `phone` varchar(10),
    `state` varchar(50),
    `city` varchar(100),
    `zip` int
);

By default, you'll probably only have an index on the id column. Now, let's say you have 20k "people" in your database. When searching by any field other than the id field, you may start to notice a bit of lag. This is where indexes will come in.

默认情况下,您可能只在id列上有一个索引。现在,假设您的数据库中有20k“人”。当使用除id字段以外的任何字段进行搜索时,您可能会开始注意到一点滞后。这是索引进入的地方。

There's a good chance that you won't be searching by the phone field (possible, but not likely), so we wouldn't index that one. However, searching by state/city/zip are more likely. When you search by city/state, you often search with them both together with a WHERE clause similar to:

您很可能不会通过电话领域进行搜索(可能,但不太可能),因此我们不会将其编入索引。但是,更有可能按州/城市/邮编搜索。当你按城市/州搜索时,你经常用它们和WHERE子句一起搜索,类似于:

WHERE state = 'Florida' AND city = 'Miami';

Because they're often-used together, you should have an index created with both fields (see multiple-column indexes). On the other hand, when you search by zip, you often do so without a city/state attached, such as:

因为它们经常一起使用,所以应该使用两个字段创建索引(请参阅多列索引)。另一方面,当您通过zip搜索时,通常会在没有附加城市/州的情况下进行搜索,例如:

WHERE zip = 12345;

With this, you'll create an index just with the zip field.

有了这个,你将使用zip字段创建一个索引。

Also, it is worth a note that indexes take up not only space, but need to be modified during any INSERT or UPDATE on a table with them. If you have numerous indexes and a lot of records, a single INSERT's time can start to be noticed. So, be sure that you actually need the additional performance boost that the index will give before adding them like salt+pepper.

此外,值得注意的是索引不仅占用空间,而且需要在具有它们的表上的任何INSERT或UPDATE期间进行修改。如果您有许多索引和大量记录,则可以开始注意单个INSERT的时间。因此,请确保您在添加它们之前确实需要额外的性能提升,例如盐+胡椒。


推荐阅读
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
mobiledu2502887833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有