例如,我有一张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)
是否有意义,我使用的复合指数都geolat和geolng,这样的:
我替换:
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服务器,所以我检查我的设置,分析慢查询日志,并尽可能简化我的查询.
如果我正确编制索引,有时候就足够了.我读过某个地方(请纠正我,如果这是愚蠢的),多于我需要的索引会产生相同的效果,就像我没有任何索引一样.
有多少索引就足够了?你可以说它取决于数百个因素,但我很好奇我如何清理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行?
我是数据库设计的新手,我已经阅读了很多关于规范化的内容.如果我有三张桌子:住宿,火车站和机场.我是否在每个表中都有地址列或其他表引用的地址表?是否存在过度规范化的问题?
谢谢
database database-design normalization database-normalization
我的问题是,我从这个链接的数据库设计是我的数据库过度设计?
编辑*确定可能使用交易?但如果失败,我应该把回滚放在哪里?
$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)
我应该把回滚放在哪里?
谢谢