首页 > 解决方案 > 在时间戳列上创建索引

问题描述

我有一个包含产品的产品表。每个产品都有一个可用期。名为 BEGIN 的列显示产品可用的开始时间的日期和时间,以及完成可用性的 END。用户可以过滤可用产品的 BEGIN 和 END 时间。此过滤器可以从一天中的几个小时到几天和几周。例如从现在到未来 3 周的可用产品。查找某些产品时,过滤查询效果很好。但是,如果在此期间没有可用的产品,则查询会搜索包含数百万条记录的完整表,并且花费的时间太长。我试图索引 BEGIN 和 END 但没有任何改变,并且仍然需要太多时间来搜索所有表。索引是解决方案吗?我正在使用mysql。表方案是:

Schema::create('products', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->unsignedInteger('price');
            $table->timestamp('begin')->nullable();
            $table->timestamp('end')->nullable();
            $table->timestamps();
        });

查询是:

$products = Product::where('begin' , '>=' , $request->begin)->where('end' , '<=' , $request->end)->simplePaginate(20);

标签: mysqlsqlindexingsql-optimization

解决方案


推荐阅读