Php MySQL选择查询与连接和大量结果优化
我有两张桌子。第一个包含所有项目信息,第二个包含带有类别ID的项目ID。原因是一个项目可以位于多个类别中。我桌上有大约50万件物品 下面是一个select查询示例:Php MySQL选择查询与连接和大量结果优化,php,mysql,optimization,query-optimization,Php,Mysql,Optimization,Query Optimization,我有两张桌子。第一个包含所有项目信息,第二个包含带有类别ID的项目ID。原因是一个项目可以位于多个类别中。我桌上有大约50万件物品 下面是一个select查询示例: SELECT SQL_CALC_FOUND_ROWS items.* FROM items INNER JOIN cat ON items.iid=cat.iid WHERE (items.expire>'1308061323' AND cat.cid = '1') AND (items.cod
SELECT SQL_CALC_FOUND_ROWS items.*
FROM items
INNER JOIN cat
ON items.iid=cat.iid
WHERE (items.expire>'1308061323' AND cat.cid = '1')
AND (items.code=71 OR items.code=23)
ORDER BY price DESC
LIMIT 0, 50
- iid=项目ID
- cid=类别ID
- 代码=我仅用于搜索的代码
- expire=某个应用程序的过期时间 项目
- 有没有办法优化它
- 使用SQL\u CALC\u FOUND\u行或带有SELECT COUNT(*)的第二个查询是否更快
- 我听说过索引,但我不知道如何使用它们以及它们做什么。他们能帮忙吗
CREATE INDEX idx_items_code ON items (code);
这将提高您的查询的即时性
我的建议是通过阅读一些文章来了解索引是如何工作的
这里有一个很好的例子:
编辑:
如果索引有那么好,我可以创建 每个字段上的索引。有什么问题 使用索引的后果 实际上,索引是一颗银弹。每次都有效。太长的查询、爆炸、创建索引。这就是为什么在创建主键时,MySQL会向字段添加索引 另一方面,索引占用了服务器上的空间,而另一个操作:删除、更新、插入将花费更多的时间 因此,如果您不经常删除、更新或插入,并且选择了很多,那么几乎可以为每个字段创建索引
最好的办法是充分了解索引的使用,这样你就可以做出正确的选择。在
cat
表上为字段iid
为
code,iid,expire
或iid,code,expire
字段在items
表中创建索引。看看哪个最快
您可以使用select前面的
EXPLAIN
,获取有关如何优化select的信息 如果不在数据库上进行任何选择,页面的加载速度总是会更快
我认为你的问题是关于你的页面被服务的时间长度,而不是功能的具体使用
您是否尝试过在SQL之前和之后设置时间戳,以确定所需的确切时间。您说您将结果集限制为50行,但您的页面实际传输了多少数据
还有什么脚本正在发生?您正在处理结果吗?脚本是否已优化
我想我会列出一些你应该看的其他东西。这两个表上有哪些索引?请发布(在问题中添加表的定义)。如果索引有那么好,我可以在每个字段上创建索引。使用索引的后果是什么?在大多数情况下,一个或两个设计良好的索引将比散点枪方法更有效。