我在应用程序中使用SQL数据库。我想提高在我的应用程序中运行搜索查询的速度。所以,自然的,我做了一些关于数据库索引的研究。关于数据库索引,有很多有用的文章,但是这些帖子让我陷入了困境。原因如下:
如果在表中执行大量搜索查询,通常在表中引入数据库索引是很好的做法。如果在表中执行大量插入和更新查询,则在表中引入数据库索引是错误的做法。
所以我的问题是,我是否应该索引这个表,以便使我的搜索操作变得更快?还是我应该找到另一种方法来提高搜索的效率?在有关表中,与搜索操作相比,执行的插入操作相对较多。大约是十倍。但是,搜索操作也比较慢,我确实想提高搜索操作的速度。
发布于 2021-03-23 11:35:16
我认为真正的答案是“视情况而定”。
你在搜索哪些字段?例如,如果用户的搜索查询应该在字段中查找姓名、姓氏、电子邮件地址、电话号码、邮政编码等.对每个字段进行索引可能并不明智,也不会有太大帮助。
你有多少张唱片?通常,表越大,没有索引的搜索就越慢,但是insert/update与索引一起使用的时间就越长。
用户多久搜索一次?它是频繁的--例如每5分钟一次,还是一天两次?
当谈到索引时,基数也很重要。基数是指列中包含的数据的唯一性。低基数可能不值得索引。考虑一个布尔字段,它可以是true或false,90%的记录被设置为true,并且在大多数情况下,您都会查询这个字段的真值。索引这个字段很可能毫无意义。
通常,大多数数据库引擎在扫描表时只能使用一个索引。如果您正在查询多个列,那么需要考虑对其中一个列的索引是否比另一个列更合适。例如,如果查询的所有产品的颜色ID为2,类别ID为100,则可能类别ID具有更高的基数,因此比颜色ID更适合索引。
问这个问题是对的,因为人们有时盲目地索引任何字段,这会增加数据库的大小并损害插入/更新性能。如果是我,并且我想定期搜索某个特定的字段,那么如果没有索引,select性能差的话,我很可能会对它进行索引。
发布于 2021-03-23 18:05:33
您没有指定您所拥有的数据类型。如果有独特的关键字可以很容易地放在列中--例如,车辆制造和模型--那么索引(Es)很可能非常有用。
如果你是亚马逊,有着不同的内容,不同的拼写习惯,那么你还有另外两个问题。
对于服装风格、模数、底盘样式、细分名称等的随机词,将信息放入TEXT列中,并与MATCH...AGAINST一起使用FULLTEXT索引--这将是快速的。但也有一定的局限性。例如,Ford F150工作得很好,但是很难搜索到Ford F-150。
避免使用LIKE '%foo%';前面的通配符禁止使用任何索引。
为用户创建索引;不要担心插入/更新。
(我同意MrCarrot的大部分说法。)
如果您提供所涉及的数据类型,我将更具体的建议。
https://stackoverflow.com/questions/66762053
复制相似问题