我有一个包含产品的产品表。每个产品都有有效期。名为BEGIN的列显示了该产品可用的开始时间的日期和时间,以及显示完成产品可用性的END。 用户可以过滤可用产品的BEGIN和END时间。该过滤器的范围可以从一天中的几小时到几天甚至几周不等。例如从现在到未来3周的可用产品。 找到一些产品时,过滤查询的效果很好。但是如果在此期间没有可用产品,则查询将搜索完整的表,该表具有数百万条记录,并且花费的时间太长。 我尝试索引BEGIN和END,但是没有任何变化,仍然需要太多时间来搜索所有表。索引解决方案吗?我正在使用mysql。 表scehame是:
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);