在一个稍微不同的说明,这样的查询基于日期是坏的检索记录。
SELECT *
FROM deals
WHERE DATE_FORMAT(expiration_date,'%Y-%m-%d %H:%i:%s') >= NOW()
AND cat1 LIKE '%$geef%'
ORDER BY deal_id ASC
过期日期的格式是什么?鉴于您将它传递给DATE_FORMAT,我会假定它是DATE或DATETIME类型。在DATE_FORMAT中包装您的expiration_date
意味着优化程序不能在该字段上使用索引,强制进行全表扫描。这是个坏消息!
你会得到相同的结果与删除DATE_FORMAT -
SELECT *
FROM deals
WHERE expiration_date >= NOW()
AND cat1 LIKE '%$geef%'
ORDER BY deal_id ASC
现在的优化器将能够使用含有到期日期作为索引的第一个字段的索引。
事实上,您有一个名为cat1
的字段,我认为您可能有其他类别字段。这又是一个坏消息。重复跨栏的组不是你的朋友。他们使各种事情比他们需要的更困难,而且效率低下。请阅读First Normal Form上的这篇文章。
查询中'$ cat'的值是多少? – safarov 2012-03-28 11:30:24
使用$ cat我可以定义类别。这对我认为的问题并不重要。 \t'$ geef = $ _GET ['categorie']; \t $ cat =“AND cat1 like'%$ geef%'”;' – Nathaniel 2012-03-28 11:32:26
什么是您的表格结构?在表格中包含一个数据样本以及您希望结果的外观是一个好主意。 – nnichols 2012-03-28 11:59:17