sql - 如何优化 MySQL 查询?

标签 sql mysql database database-design

我目前正在使用带有 PHP 的 mysql,因为这是我学到的,而且从未使用过任何其他东西。在我当前的项目中,我有一个包含 1000 万行和大约 10 列的数据库,当我在本地 (windows) 环境和生产 (linux) 环境中进行复杂调用时,我发现它非常慢。两台服务器都有超过 10GB 的内存。我已经安装了 Zend AMF,因此所有数据传输都是二进制的。

我是自学的,从来没有人教过我高效 dbm 的来龙去脉。我的第一个想法是将数据库分成多个 block ,然后更改我所有的 php 代码。看起来很麻烦,而且 php 代码中容易出错……有没有更好的方法我不知道?

我的用户界面是基于 Flash 的,如果这意味着显着提高速度,我愿意更改中间件。在这一点上我真的只知道PHP是一个中间件。

此时我不想学习另一个数据库,并且认为必须有一些交易技巧来优化我的性能,但我想在我破解我的数据库之前获得一些想法。

仅供引用:从用户的角度来看,数据库是只读的。用户没有向数据库中输入任何新数据。此外,在数据库的 1000 万行中,只有大约 200,000 行被频繁使用。 (我不知道哪些 200K 行被大量使用,因为记录此信息可能会进一步降低我的数据库速度)。

每次调用都是这样的:

SELECT   name, id, address 
FROM     table 
WHERE    date_added=? 
LIMIT    ?,? 
ORDER BY no_children ASC

...和其他各种“选择”语句。

最佳答案

你有index吗?在 date_added 字段?如果没有,创建一个,然后重试:

CREATE INDEX ix_date_added on table (date_added);

您可能还有兴趣查看 MySQL 引用手册中的以下文章:

您还应该尝试使用 EXPLAIN在您的 SELECT 语句之前查看查询是否将使用您的任何索引。这通常是正确解决性能问题的第一步。

关于sql - 如何优化 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126452/

相关文章:

mysql - Mysql大表中如何将数据从一个表移动到另一个表

mysql - 如何处理从游戏中不断更新的数据库

javascript - 搜索在多个 javascript 文件中使用一个 mongodb 连接的最佳实践

c# - 在表格的网站行中显示

sql - 是否可以让 PostgreSQL 函数返回 “arbitrary” 类型?

sql - 列的默认值(当值设置为 NULL 时)等于其他列

mysql - SQL - 数据库设计,需要建议

mysql - 重复DB值

mysql - 从数据库检索值时出现空指针异常

PHP 图片上传 MySQL