mysql = 使用索引_mysql – SQL查询没有正确使用索引

我的一个SQL查询有问题.这是我的查询:

explain

SELECT DISTINCT profiles.hoofdrubriek, profiles.plaats, profiles.bedrijfsnaam, profiles.gemeente, profiles.bedrijfsslogan, profiles.straatnaam, profiles.huisnummer, profiles.postcode, profiles.telefoonnummer, profiles.fax, profiles.email, profiles.website, profiles.bedrijfslogo

FROM profiles

LEFT JOIN profile_subrubriek ON profiles.ID=profile_subrubriek.profile_id

LEFT JOIN rubrieken ON profile_subrubriek.subrubriek_id=rubrieken.ID

WHERE (

rubrieken.rubriek = 'Pedicurepraktijken' OR

profiles.hoofdrubriek = 'Pedicurepraktijken'

)

ORDER BY profiles.grade DESC, profiles.bedrijfsnaam

这段查询中的“OR”运算符会导致麻烦:

rubrieken.rubriek = 'Pedicurepraktijken' OR profiles.hoofdrubriek = 'Pedicurepraktijken'

我已经在我的所有表上应用了索引,如果我取出上面两行代码中的一行,它就能正常运行.将它们与OR运算符组合会导致它崩溃并拒绝使用我在配置文件表中的’hoofdrubriek’列上应用的索引.在我的相关表格的布局下面:

CREATE TABLE `profiles` (

`ID` varchar(255) NOT NULL DEFAULT '',

......

`hoofdrubriek` varchar(255) DEFAULT NULL,

...

`timestamp` datetime DEFAULT NULL,

`meerderevestigingen` varchar(255) NOT NULL,

`grade` int(5) NOT NULL,

PRIMARY KEY (`ID`),

KEY `IDX_TIMESTAMP` (`timestamp`),

KEY `IDX_NIEUW` (`nieuw`),

KEY `IDX_HOOFDRUBRIEK` (`hoofdrubriek`),

KEY `bedrijfsnaam` (`bedrijfsnaam`),

KEY `grade` (`grade`),

KEY `gemeente` (`gemeente`),

KEY `plaats` (`plaats`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

CREATE TABLE `rubrieken` (

`ID` mediumint(9) NOT NULL AUTO_INCREMENT,

`rubriek` varchar(255) NOT NULL,

PRIMARY KEY (`ID`),

UNIQUE KEY `rubriek` (`rubriek`)

) ENGINE=MyISAM AUTO_INCREMENT=1905 DEFAULT CHARSET=utf8

CREATE TABLE `profile_subrubriek` (

`profile_id` varchar(20) NOT NULL,

`subrubriek_id` mediumint(9) NOT NULL,

PRIMARY KEY (`subrubriek_id`,`profile_id`),

KEY `profile_id` (`profile_id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8

当然我可以用UNION DISTICT来解决这个问题,从而结合了两个不同的查询,但我不认为这应该是要走的路.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值