为简单起见,我将在此处将我的问题描述为理论问题。假设您有两个表格——MATCHES和FIGHTERS。'Fighters'有一个战士列表(pk_fighter_id,fighter_name),其中任何两个都可以被安排来互相对战。“匹配”可能是一个三字段表(pk_fight_num、fk_fighter_id1、fk_fighter_id2),用于跟踪这些配对。Fighter1和Fighter2是引用Fighters表中条目的外键。我需要获取所有战斗的列表,以显示谁在与谁战斗,即“23123|Pacquaio|Marquez”。不过,我到底该如何构造我的查询?我想是这样的:select
我有两个查询,第一个(内连接)超快,第二个(左连接)超慢。如何使第二个查询更快?EXPLAINSELECTsaved.emailFROMsavedINNERJOINfinishedONfinished.email=saved.email;idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEfinishedindexNULLemail258NULL32168Usingindex1SIMPLEsavedrefemailemail383func1Usingwhere;UsingindexEXPLAINSELECTsa
当我使用phpMyAdmin查看我的在线表格时,它使用整理方法“latin_swedish_ce”。为什么?默认值是多少?以及,使用什么整理方法? 最佳答案 MySQL中的一个字符串有一个charactersetandacollation.utf8是一个字符集,utf8_bin是它的一种排序规则。排序规则决定了MySQL如何比较字符串。例如,这里有两种比较UTF8字符串的方法:selectcasewhen'test'='TEST'collateutf8_binthen'true'else'false'end,casewhen'tes
我很想连接两个表,但似乎无法正确连接,结构如下所示。表1(成员)[用户登录|姓名]表2(文章)[艺术编号|作家|内容]Article.writer指向Members.UserLogin我想用尽可能少的代码显示已注册UserLogins的整个列表,以及他们可能写了多少文章的计数,或者如果他们没有写过任何文章,他们也应该在列表中.我想要什么:[用户登录|名称|文章撰写]到目前为止我得到的是:SELECTUserLogin,Name,Writer,count(*)FROMArticleINNERJOINMembersonWriter=UserLoginGROUPBYUserLogin;或
给出这个查询:EXPLAINSELECTmi.*,i1.sizesastile_photo_sizes,i1.filenameastile_photo_filename,v.title_cachedasvenue_title,v.subtitle_cachedasvenue_subtitle,v.slugasvenue_slugFROMmenuitemsmiINNERJOINimagesi1ONi1.id=mi.tile_photo_idINNERJOINmenusmONm.id=mi.menu_idINNERJOINvenuesvONv.id=m.venue_idWHERENOTm.
假设我有3张table乘客(身份证[pk],姓名)飞机(登记[pk],num_seats)预订(Id,passenger_id[fk->Passenger.Id],airplane_registration[fk->Airplane.registration])这里的预订表将是一个连接对象,因为表Passenger和Booking之间存在多对多关系。我如何选择与特定预订ID(例如“abcde”)相关的所有详细信息?这是正确的吗:SELECTPassenger.name,Airplane.num_seats,Booking.IdFROMBookingJOINPassengerONPass
回答thisSQLquestion,遇到过这样的说法,固定值IN()运算符比同样内容的INNERJOIN慢很多,以至于不如创建临时的值的表并加入它们。它是真的吗(一般来说,对于MySQL,任何其他SQL引擎)如果是的话-为什么?直觉上,IN应该更快-您正在将潜在匹配与一组固定值进行比较,这些值已经在内存中并且采用所需的格式,而使用JOIN您必须查询索引,可能从磁盘加载数据,并执行IN可能不需要的其他操作。我错过了什么重要的东西吗?请注意,与thisquestion不同它有很多重复项,我说的是IN()具有固定的值集,而不是子查询。 最佳答案
现在我想到了三个选项。1st->四列(日、月、年、日)=>28,03,2011,1我可以轻松地搜索和修改这些列,而无需额外学习mysql日期。2nd->一个日期列(dd-mm-yyyy)=>28-03-2011这只需要一列,更易于管理,因为只有一个WHERE参数用于搜索日期。但我不知道如何搜索某一天的所有记录。假设过去所有星期一的所有数据或所有28日的所有数据。3rd->两列(今天日期的unix时间戳)=>1827328721,1现在,在这里我可以将数据存储为时间戳,并通过简单地获取日期然后将其转换为unix时间戳然后在sql中使用它来轻松地进行搜索和比较。对于day,我可以使用day
通过反复试验,我发现当从下面的查询中删除连接时,它的运行速度提高了大约30倍。有人可以解释为什么会这样,以及是否可以优化查询以包含额外的连接而不影响性能。这是说明的屏幕截图,显示索引未用于uesr_groups表。http://i.imgur.com/9VDuV.png这是原始查询:SELECT`comments`.`comment_id`,`comments`.`comment_html`,`comments`.`comment_time_added`,`comments`.`comment_has_attachments`,`users`.`user_name`,`users`.`
我有两个表:table1(id,name,connte)table2(id,name,connte)它们通过table1.connte和table2.connte连接。每条记录包含100条记录。现在,如果我想从表1中删除一条id=20的记录及其在表2中的相应子项,是否最好执行以下操作:DELETEd1,d2FROMtable1d1INNERJOINtable2d2ONd1.connte=d2.connteWHEREd1.id=20或以下内容:selectconntefromtable1whereid=20--Storeconnteinavariablesayaabc--deletefr