如何使用索引优化此MySql表以提高搜索速度?

彼得·龙虾

作为一名MySql业余爱好者,我想请教一些有关表优化和索引使用的建议。

考虑一个包含用户发布的广告的表。该表具有以下结构(这是Laravel实现,但我认为代码很不言自明):

Schema::create('advertisements', function (Blueprint $table) {
        $table->increments('id');     //PRIMARY KEY AUTOINCREMENTS
        $table->text('images');       //TEXT
        $table->string('name', 150);  //VARCHAR(150)
        $table->string('slug');       //VARCHAR(255)
        $table->text('description');
        $table->string('offer_type',7)->nullable()->index();
        $table->float('price')->nullable();
        $table->string('deal_type')->nullable()->index();
        $table->char('price_period',1)->nullable()->index();
        $table->float('price_per_day')->nullable();
        $table->float('deposit')->nullable();

        $table->integer('category_id')->unsigned()->index();
        $table->foreign('category_id')->references('id')->on('categories');

        $table->integer('author_id')->unsigned()->nullable();
        $table->foreign('author_id')->references('id')->on('users');

        $table->timestamps();
    });

在网站上的用户可以在表格中搜索广告以上使用几个标准,如:price范围,offer_typeprice_perioddeal_type

正如你可以看到我已经编入索引offer_typeprice_period并且deal_type列。据我了解,这导致数据库在这些列中创建值的BTREE索引。

但是,这些值始终将来自预定义的集合:例如,-price_period始终是以下值之一:(NULL, h, d, w, m, y小时,天,周,月,年。)该deal_type列始终为offerdemand

问题: 如果我有一组仅包含预定义的较小值范围中的值的列,那么为它们创建一个单独的表并使用外键而不是对这些列进行索引是否更好(从性能角度而言)?编辑:经过进一步的研究,我现在意识到,外键只是一种引用工具,而不是一种性能工具,它们也可以(也应该)被索引。但是,具有数字索引的外键是否比具有短字符串索引的索引更好?

里克·詹姆斯

索引标志和其他低基数列通常是无用的。例如,如果表的一半对标志具有特定值,则忽略该标志上的索引并仅扫描整个表的速度更快

我们确实需要查看查询才能判断需要哪些索引。根据您的提示,我还是会刺中...

“例如:价格范围,offer_type,price_period或deal_type”-我假设用户会给出最小和最大价格?然后让我们建立一个“复合”指数结束price_per_day他们会一直指定其他所有三列吗?每个列都有一个值?如果对上述所有设置为是,则此综合索引为最佳:

INDEX(over_types, price_period, deal_type, price_per_day)

(前三列可以按任何顺序排列,但应用于范围的内容必须在最后。)

如果用户可能仅包括那些标志中的一些,和/或可能包括这些标志的多个值,那么它将变得更加混乱。观察用户的要求,并根据常见查询量身定制额外的索引。使用此索引食谱来帮助构建它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何提高此MySQL查询的速度?

来自分类Dev

如何提高此MySQL查询的速度?

来自分类Dev

使用OR时如何优化MySQL表中的搜索?

来自分类Dev

如何提高使用MySQL的PHP脚本的速度?

来自分类Dev

索引将如何提高MySQL中的汇总查找速度?

来自分类Dev

索引将如何提高MySQL中的汇总查找速度?

来自分类Dev

如何使用表联接优化此查询?

来自分类Dev

MatLab代码的速度和优化。如何提高?

来自分类Dev

优化mysql表索引

来自分类Dev

可以优化此查询以提高网站速度吗?

来自分类Dev

如何提高此JS函数的速度

来自分类Dev

EXCEL VBA:如何提高此代码的速度

来自分类Dev

是否可以提高此搜索和复制代码段的速度?

来自分类Dev

优化mysql设置/表以提高负载性能

来自分类Dev

索引如何加快搜索速度?

来自分类Dev

如何使用正确的索引加快此慢速查询的速度?

来自分类Dev

如何优化此MYSQL查询-联接多个表

来自分类Dev

如何优化此for循环的计算速度?

来自分类Dev

优化MySQL表索引/查询

来自分类Dev

如何提高刷新数据透视表的速度

来自分类Dev

如何通过适当的 async/await/promises 提高此代码的速度

来自分类Dev

如何使用RallyAPIForJava提高速度

来自分类Dev

使用CloudFront如何提高上传速度?

来自分类Dev

如何使用RallyAPIForJava提高速度

来自分类Dev

如何使用多列索引优化MySQL查询?

来自分类Dev

如何使用空列优化MySQL中的索引?

来自分类Dev

如何优化此代码以创建TIFF文件和/或应考虑使用哪些替代库来提高性能?

来自分类Dev

提高mysql导入速度

来自分类Dev

如何通过索引正确提高MySQL性能