相关疑难解决方法(0)

我什么时候应该使用复合索引?

  1. 我应该何时在数据库中使用复合索引?
  2. 使用复合索引的性能分支是什么?
  3. 我为什么要使用复合索引?

例如,我有一张homes桌子:

CREATE TABLE IF NOT EXISTS `homes` (
  `home_id` int(10) unsigned NOT NULL auto_increment,
  `sqft` smallint(5) unsigned NOT NULL,
  `year_built` smallint(5) unsigned NOT NULL,
  `geolat` decimal(10,6) default NULL,
  `geolng` decimal(10,6) default NULL,
  PRIMARY KEY  (`home_id`),
  KEY `geolat` (`geolat`),
  KEY `geolng` (`geolng`),
) ENGINE=InnoDB  ;
Run Code Online (Sandbox Code Playgroud)

是否有意义,我使用的复合指数都geolatgeolng,这样的:

我替换:

  KEY `geolat` (`geolat`),
  KEY `geolng` (`geolng`),
Run Code Online (Sandbox Code Playgroud)

有:

KEY `geolat_geolng` (`geolat`, `geolng`)
Run Code Online (Sandbox Code Playgroud)

如果是这样:

  • 为什么?
  • 使用复合索引的性能分支是什么?

更新:

由于很多人都声明它完全依赖于我执行的查询,因此下面是最常见的查询:

SELECT * FROM homes
WHERE geolat BETWEEN ??? AND …
Run Code Online (Sandbox Code Playgroud)

mysql indexing composite-index

122
推荐指数
6
解决办法
6万
查看次数

MySQL索引 - 有多少就足够了?

我正在尝试微调我的MySQL服务器,所以我检查我的设置,分析慢查询日志,并尽可能简化我的查询.

如果我正确编制索引,有时候就足够了.我读过某个地方(请纠正我,如果这是愚蠢的),多于我需要的索引会产生相同的效果,就像我没有任何索引一样.

有多少索引就足够了?你可以说它取决于数百个因素,但我很好奇我如何清理mysql-slow.log足够的以减少服务器负载.

此外,我看到了一些像这样"有趣"的日志条目:

# Query_time: 0  Lock_time: 0  Rows_sent: 22  Rows_examined: 44
SELECT * FROM `categories` ORDER BY `orderid` ASC;
Run Code Online (Sandbox Code Playgroud)

有问题的表包含22行,索引设置为orderid.为什么这个查询毕竟出现在日志中?为什么检查44行,如果它只包含22行?

mysql indexing performance logging

15
推荐指数
4
解决办法
1万
查看次数

数据库规范化

我是数据库设计的新手,我已经阅读了很多关于规范化的内容.如果我有三张桌子:住宿,火车站和机场.我是否在每个表中都有地址列或其他表引用的地址表?是否存在过度规范化的问题?

谢谢

database database-design normalization database-normalization

9
推荐指数
2
解决办法
4758
查看次数

在PDO中回滚事务的位置?

我的问题是,我从这个链接的数据库设计是我的数据库过度设计?

编辑*确定可能使用交易?但如果失败,我应该把回滚放在哪里?

 $dbConnect->beginTransaction();
 $RegisterInsert = $dbConnect->prepare("INSERT INTO companies (
    `name`, `address`, `email`, `phone`, `link`, `verified`) VALUES (
    :name, :address, :email, :phone, :link, :verified)");
    $RegisterInsert->execute($RegisterData);

    $RegisterData2['CID'] = $dbConnect->lastInsertId();  

    $RegisterInsert = $dbConnect->prepare("INSERT INTO users_companies (
    `UID`, `CID`, `role`) VALUES (
    :UID, :CID, :role)");
    $RegisterInsert->execute($RegisterData2);
    $dbConnect->commit();
Run Code Online (Sandbox Code Playgroud)

我应该把回滚放在哪里?

谢谢

php mysql database pdo insert

6
推荐指数
2
解决办法
6167
查看次数