我有两个查询加上自己EXPLAIN的结果:
一:
SELECT *
FROM notifications
WHERE id = 5204 OR seen = 3
Run Code Online (Sandbox Code Playgroud)
基准(10,000行):0.861
二:
SELECT h.* FROM ((SELECT n.* from notifications n WHERE id = 5204)
UNION ALL
(SELECT n.* from notifications n WHERE seen = 3)) h
Run Code Online (Sandbox Code Playgroud)
基准(10,000行):2.064
上面两个查询的结果是相同的.我在notifications桌子上也有这两个索引:
notifications(id) -- this is PK
notification(seen)
Run Code Online (Sandbox Code Playgroud)
如您所知,OR通常会阻止索引的有效使用,这就是我编写第二个查询(by UNION)的原因.但经过一些测试后,我发现使用OR它的速度要快得多UNION.所以我很困惑,我真的不能选择我的最佳选择.
基于一些合理和合理的解释,使用union更好,但基准测试的结果表明使用OR更好.如果我使用哪种方法,请你帮助我吗?
这是我的代码:
.compare_header_box{
padding: 35px 30px;
direction: rtl;
}
.compare_header_box_title{
font-size: 30px;
width: 100px;
float: right;
margin-right: 5px;
margin-top: 4px;
}
.compare_header_box_items{
width: 100%;
border-bottom: 1px solid #ccc;
direction: ltr;
}
.compare_header_box_items a{
display: inline-block;
font-size: 16px;
padding: 15px 40px;
}
.compare_header_box_items a:hover{
text-decoration: none;
background-color: #f1f1f1;
color: black;
}
.compare_header_box_items .active{
border-top: 3px solid orange;
border-right: 1px solid #ccc;
border-left: 1px solid #ccc;
border-bottom: 1px solid white;
}Run Code Online (Sandbox Code Playgroud)
<div class="compare_header_box">
<span class="compare_header_box_title active">List</span>
<div class="compare_header_box_items">
<a href="./gp">gp</a>
<a href="./in">in</a>
<a …Run Code Online (Sandbox Code Playgroud)我有一个 PHP 脚本,它通过使用打开 http 请求CURL:(如果需要,它还接受标头)
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
if ($post_paramtrs) {
curl_setopt($c, CURLOPT_POST, TRUE);
curl_setopt($c, CURLOPT_POSTFIELDS, "var1=bla&" . $post_paramtrs);
}
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0");
curl_setopt($c, CURLOPT_COOKIEJAR, $dirname . 'cookief.txt');
curl_setopt($c, CURLOPT_COOKIEFILE, $dirname . 'cookief.txt');
curl_setopt($c, CURLOPT_MAXREDIRS, 10);
$follow_allowed = (ini_get('open_basedir') || ini_get('safe_mode')) ? false : true;
if ($follow_allowed) {
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
}
curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 9);
curl_setopt($c, CURLOPT_REFERER, $url);
curl_setopt($c, …Run Code Online (Sandbox Code Playgroud)我有这样一张桌子:
// mytable
+----+------------+
| id | date_time |
+----+------------+
| 1 | 1464136759 | -- 5 days ago
| 2 | 1464436759 | -- 2 days ago
| 3 | 1464538248 | -- 6 hours ago
+----+------------+
-- ^ these are based on current time which is 1464561158
Run Code Online (Sandbox Code Playgroud)
我也有这个问题:
SELECT id, CASE DATE(FROM_UNIXTIME(date_time))
WHEN CURDATE() THEN 'today'
WHEN CURDATE() - INTERVAL 1 DAY THEN 'yesterday'
WHEN CURDATE() - INTERVAL 7 DAY THEN 'in last week'
ELSE 'in last month …Run Code Online (Sandbox Code Playgroud) 我有一些触发器BEFORE INSERT,AFTER DELETE在桌子上。如何确保触发器失败,然后我的查询得到回滚?
我的意思是我想确定,要么查询和触发都有效,要么它们都不起作用。那么是触发器交易吗?
我有一个这样的查询:
( SELECT * FROM mytable WHERE author_id = ? AND seen IS NULL )
UNION
( SELECT * FROM mytable WHERE author_id = ? AND date_time > ? )
Run Code Online (Sandbox Code Playgroud)
我还有这两个索引:
(author_id, seen)
(author_id, date_time)
Run Code Online (Sandbox Code Playgroud)
我在某处读到:
WHERE一个查询在处理子句时一般每个表只能使用一个索引
正如您在我的查询中看到的,有两个单独的WHERE子句。所以我想知道,“每个表只有一个索引”意味着我的查询只能使用这两个索引之一,或者它可以为每个子查询使用这些索引之一并且这两个索引都有用?
换句话说,这句话是真的吗?
“总是会使用其中一个索引,而另一个则无用”
这是表结构:
+----+-----------------------------+-----------+
| id | post_content | edited_id |
+----+-----------------------------+-----------+
| 1 | content 1 | NULL |
| 2 | content 2 | NULL |
| 3 | content 1 (edited) | 1 |
| 4 | content 3 | NULL |
| 5 | content 4 | NULL |
| 6 | content 4 (edited) | 5 |
| 7 | content 1 (edited) | 1 |
+----+-----------------------------+-----------+
Run Code Online (Sandbox Code Playgroud)
现在我想选择每篇文章的最新编辑版本.所以这是预期的结果:
+----+-----------------------------+-----------+
| id | post_content | edited_id |
+----+-----------------------------+-----------+ …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
$("input").on('keydown', function(){
$.ajax({
url : '/files/tags_autocomplete.php',
dataType : 'JSON',
success : function (tags) {
$("ul").html(tags.output);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我的代码在用户输入标签时向用户建议了一些标签(具有匹配的子字符串与用户目前已写入的标签)作为自动完成框.
我的问题是什么?我当前的代码每个keydown发送一个新的ajax请求.例如,如果用户写入something,我的脚本会发送9个ajax请求,这看起来像是一场噩梦.
无论如何,我该怎么处理?我的意思是我需要实现发送延迟吗?像"在插入最后一个字符后1秒才发送请求"之类的东西?或者有更好的主意吗?
我正在尝试开始学习git并使用它。我已经下载了有关该内容的培训视频git,目前正在观看。
我已经下载并安装git在我的电脑上。我使用 Windows 8 操作系统(32 位版本)。Git Init Here但我不知道为什么我右键单击时没有选项:
正如你所看到的,当我右键单击时出现的框有两个关于 git 的选项:
Git GUI HereGit Bash Here但教程视频中的选项还有一个名为 的选项Git Init Here。那么,为什么我的没有这个选项呢?是不是我安装git 错了?
我在存储库中进行了一些更改,并注册了一个提交(在本地)。然后我执行了这个:
$ git pull origin master
Run Code Online (Sandbox Code Playgroud)
我的本地提交与被拉的合并。现在我很后悔。我想获取远程分支主服务器上的最新版本,并获取本地提交(已合并)的信息。
我可以通过以下命令更改工作目录:
// the last commit on the remove branch master
$ git checkout 84acc42 .
Run Code Online (Sandbox Code Playgroud)
但是,如果我对其进行一些更改并将其推送,我想以前的更改仍然存在并且也将作为提交推送。因为该提交存在。
注意,$ git reset --hard这不会删除任何内容。我执行了该操作,但仍然看到了不需要的更改。
知道如何获取远程存储库(分支母版)上的最新版本并删除其他所有内容吗?我可以通过删除本地工作目录并从存储库中再次克隆来实现。但是我想知道是否还有另一种方法。